我在gwt应用程序中创建了两个模块名称module1和module2。我想在几秒钟后同时将消息从module1传递到module2,同时将module2传递给module1。 我编写了以下代码,但它让我无法在类路径中找到module1.gwt.xml。
public void onModuleLoad() {
mainBus.fireEvent(new PingEvent("-----Simulation Started-----"));
}
module1
public void onModuleLoad()
{
GWTEventBus.mainBus.addHandler(PingEvent.TYPE, new PingEventHandler(){
public void onEvent(PingEvent event) {
System.out.print("Inside Ping --> ");
new Timer(){
public void run() {
GWTEventBus.mainBus.fireEvent(new PongEvent("Pong fired..."));
}
}.schedule(1000);
}
});
}
module2
public void onModuleLoad()
{
//final SimpleEventBus mainBus = new SimpleEventBus();
GWTEventBus.mainBus.addHandler(PongEvent.TYPE, new PongEventHandler(){
public void onEvent(PongEvent event) {
System.out.print("Inside Pong1 --> ");
new Timer(){
public void run() {
GWTEventBus.mainBus.fireEvent(new PingEvent("Ping fired..."));
}
}.schedule(1000);
}
});
}
plz help me.
答案 0 :(得分:2)
如果您尝试在同一网页中包含两个独立的模块(* .nocache.js文件),除非使用JS,否则无法传递消息。
使用JSNI从module1导出一些方法,以便在javascript中可用,然后使用JSNI从module2调用此方法。
package my.package.module1;
public class MyClass1 implements EntryPoint {
public void onModuleLoad() {
exportMyJavaMethod();
}
public static String myJavaMethod(String message) {
// Do whatever with the message received (create an event, etc.)
return "Hello " + message;
}
private native static exportMyJavaMethod() /*-{
$wnd.myJavaMethod = @my.package.module1.MyClass1::myJavaMethod;
}-*/;
}
package my.package.module2;
public class MyClass2 implements EntryPoint {
public void onModuleLoad() {
String ret = callMyJavaMethod("foo");
}
private native static callMyJavaMethod(String s) /*-{
return $wnd.myJavaMethod(s);
}-*/;
}
请注意,使用JSNI,您必须根据基元类型传递消息(请参阅documentation)
BTW:我宁愿使用gwtexporter来导出JS中我想要的方法和类,而使用gwtquery来调用JS方法而不是使用JSNI。答案 1 :(得分:0)
您的应用只能有一个入口点,但您可以让主模块继承多个其他gwt应用。我建议调查模块继承。您可以继承.gwt.xml文件中的模块,并且将加载该模块,并自动调用其onModuleLoad方法。
https://developers.google.com/web-toolkit/doc/latest/DevGuideOrganizingProjects#DevGuideModules