最近在研究 libgdx gwt的 java 和js 的 相互调用(客户端java和 js 的相互调用)。
成功demo;
java 代码:
package com.mygdx.jsnitest;
/**
*
* demo:
* JsniTest jsniTest = new JsniTest();
* jsniTest.alert("Hello MyGdxGame!");
* jsniTest.jsCallJava();
* @ClassName: JsniTest
* @date 2015年6月10日 下午4:37:45
* @version V1.0
*/
public class JsniTest {
/**
* java 调用 js alert方法
*/
public native void alert(String str)
/*-{
$wnd.alertStr(str);
}-*/;
/**
* java 调用 js (在这个方法中会先 调用一次outJsCallGwt 方法 类似于声明该方法[必须]。 在js 的callJavafunction 方法中会调用 outJsCallGwt方法)
*/
public native void jsCallJava()/*-{
var instance = this;
instance.@com.mygdx.jsnitest.JsniTest::outJsCallGwt(Ljava/lang/String;)("str");
$wnd.callJavafunction();
}-*/;
/**
* js 中 回调 java 的方法 此方法需要先调用一次
*/
public native void outJsCallGwt(String str)/*-{
var weather = this;
$wnd.outJsCallGwt = function (str) {
weather.@com.mygdx.jsnitest.JsniTest::callback(Ljava/lang/String;)(str);
};
}-*/;
/**
* java 方法 (调用alert 是方便在网页上看到回调到java端的结果)
*/
public void callback(String str){
alert("Hello callback! "+str);
}
}
js 代码:
<script>
function handleMouseDown(evt) {
evt.preventDefault();
evt.stopPropagation();
evt.target.style.cursor = 'default';
}
function handleMouseUp(evt) {
evt.preventDefault();
evt.stopPropagation();
evt.target.style.cursor = '';
}
function alertStr(str){
alert("str:"+str);
}
function callJavafunction(){
outJsCallGwt("callJavafunction");
}
document.getElementById('embed-html').addEventListener('mousedown', handleMouseDown, false);
document.getElementById('embed-html').addEventListener('mouseup', handleMouseUp, false);
</script>
其中handleMouseDown 和 handleMouseUp 是libgdx 自动生成的方法(可以不用管)
callJavafunction 是js 调用java端的方法(注意调用的java方法要先在java端调用一次 【见 java代码里的注释】),alertStr方法时java端调用的js方法。
测试成功 ,libgdx gwt可以成功编译发布。