您的位置:首页 > 编程语言 > Java开发

gwt中 java与js 的相互调用

2015-06-10 16:40 363 查看
最近在研究 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可以成功编译发布。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  libgdx 跨平台 html gwt jsni