Java GWT从小程序调用JS方法

Java GWT从小程序调用JS方法,java,javascript,gwt,applet,Java,Javascript,Gwt,Applet,我试图从applet调用一个Javascript方法,我读了一些示例,但没有任何效果 小程序: JSObject window = JSObject.getWindow(this); String[] args = new String[]{"some string"}; window.call("alert2 ", args); GWT,视图 public static native void export() /*-{ $wn

我试图从applet调用一个Javascript方法,我读了一些示例,但没有任何效果

小程序:

        JSObject window = JSObject.getWindow(this);
        String[] args = new String[]{"some string"};
        window.call("alert2 ", args);
GWT,视图

    public static native void export() /*-{
    $wnd.alert2 = function(result) {
        @cl.covepa.client.main.shared.view.DlgVerificarHuellaView::alert2(Ljava/lang/String;)(result);
    }
}-*/;

public static void alert2(String result) {
    Dialogs.getInstance().alert("CONFIRMACION :" + result);
}
在构造函数调用时,我也测试onModuleLoad

export();
当小程序运行时,它会显示

JavaScript对象上没有这样的方法“alert2”

没关系,我知道代码是模糊的,但我想这是方法保留名称的方式,但不起作用,我仍然在客户端看到这一点

function dBb(){$wnd.alert2=function(a){T2c((!S2c&&(S2c=new X2c),S2c),'CONFIRMACION :'+a)}}
我错过了什么?!,谢谢

更新:

HTMLPanel包含一个带有以下字符串的HTML对象,即它的AddAtShow对话框

<div> 
   <applet id="uploadApplet" code="app.VerifHuella.class" 
           archive="VerificarHuella.jar" width="322" height="465" MAYSCRIPT>
       <param name="RUT" value="15645322"/>
   </applet> 
</div>

您的问题似乎是,调用该方法时,该方法在窗口中不可用。这可能是因为三个原因:

  • 在gwt置换的异步加载发生之前,您的appled运行
  • 您没有在
    onModuleLoad()中调用
    export()
    方法
  • 您的alert2方法不是静态的
无论如何,如果您想在不使用一行jsni的情况下导出类和方法,您可以尝试,在您的情况下,您的代码可能如下所示:

 class DlgVerificarHuellaView implements Exportable {
    @Export($wnd.alert2)
    public static void alert2(String msg) {
    }
 }
导出函数而不编写jsni的另一个好方法是使用:


当您从小程序调用JS global scope时,
alert2
是否定义在JS global scope中?您可能正在寻找使用在编译过程中混淆GWT代码的方法吗?SSR我正试图这样做,但如果不起作用,我将使用它。user592704 obfuscate是GWT的默认工作,是吗。VisioN,上面是我所有的代码,也许我遗漏了一些东西,但我认为它应该很简单。
window
是GQuery中的一个静态变量。因此,
import static…GQuery.
发挥了神奇的作用
import static com.google.gwt.query.client.GQuery.*

Properties wnd = window.cast();
wnd.setFunction("alert2", new Function() {
  public void f() {
    Properties arg = getDataProperties();
    DlgVerificarHuellaView.alert2(arg.get(0));
  }
});