Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GWT的JSNI从java方法获取返回值_Java_Javascript_Gwt_Jsni - Fatal编程技术网

使用GWT的JSNI从java方法获取返回值

使用GWT的JSNI从java方法获取返回值,java,javascript,gwt,jsni,Java,Javascript,Gwt,Jsni,我试图从java方法中获取返回值,但它返回了一个非常奇怪的结果:它返回的方法本身是用javascript编写的 下面是java方法的代码: public String getNameToShow() { return "Chart number 1"; } 以及javascript方法: public native void drawJSChart(String divId, int a, String jsData) /*-{ try {

我试图从java方法中获取返回值,但它返回了一个非常奇怪的结果:它返回的方法本身是用javascript编写的

下面是java方法的代码:

public String getNameToShow() {
        return "Chart number 1";
    }
以及javascript方法:

 public native void drawJSChart(String divId, int a, String jsData) /*-{
            try {
                //First create a script where to paste the jsData
                var scriptID = this.@myPackage.MyClass::getNameToShow();
                console.log(scriptID);
                //Some code
            } catch (e) {
                console.error(e.message);
            }
        }-*/;

谢谢。

它返回js方法,因为您要求使用js方法

从JSNI代码调用java方法应如下所示:

var scriptID = this.@myPackage.MyClass::getNameToShow(*)(); //notice second pair of braces

基本上,要从JSNI调用java方法,需要放置两对大括号。首先在我使用的示例中定义方法参数类型*,这样它将匹配任何参数类型,第二个用于将参数传递到方法。

它返回js方法,因为您要求使用js方法

从JSNI代码调用java方法应如下所示:

var scriptID = this.@myPackage.MyClass::getNameToShow(*)(); //notice second pair of braces

基本上,要从JSNI调用java方法,需要放置两对大括号。首先在我使用的示例中定义方法参数类型*,这样它将匹配任何参数类型,第二个用于将参数传递给方法。

您还必须传递Java函数的类型。这样写很有效:

package XXXXX.client;

import com.google.gwt.core.client.EntryPoint;

class _24_TestJSNIMethodCallback implements EntryPoint {
    public void onModuleLoad() {
        drawJSChart();
    }

    public String getNameToShow() {
        return "Chart number 1";
    }

    public native void drawJSChart() /*-{
        try {
            //First create a script where to paste the jsData 
            var scriptID = this
                    .@XXXXX.client._24_TestJSNIMethodCallback::getNameToShow()();
            $wnd.alert(scriptID);
            //Some code 
        } catch (e) {
            console.error(e.message);
        }
    }-*/;

}

您还必须传递Java函数的类型。这样写很有效:

package XXXXX.client;

import com.google.gwt.core.client.EntryPoint;

class _24_TestJSNIMethodCallback implements EntryPoint {
    public void onModuleLoad() {
        drawJSChart();
    }

    public String getNameToShow() {
        return "Chart number 1";
    }

    public native void drawJSChart() /*-{
        try {
            //First create a script where to paste the jsData 
            var scriptID = this
                    .@XXXXX.client._24_TestJSNIMethodCallback::getNameToShow()();
            $wnd.alert(scriptID);
            //Some code 
        } catch (e) {
            console.error(e.message);
        }
    }-*/;

}

谢谢。它成功了,我想知道为什么它没有返回我所期望的!谢谢。它成功了,我想知道为什么它没有返回我所期望的!