java - GWT 托管模式和小程序

标签 java gwt

在托管模式下启动 GWT 时,可以在小程序和 GWT 应用程序之间进行通信(反之亦然)吗?我认为不行,因为小程序只能与 JavaScript 通信(通过 LiveConnect),但 GWT 的托管模式不会产生任何 JS...

最佳答案

虽然托管模式在jvm中运行部分代码,但所有jsni/dom/native调用都委托(delegate)给浏览器,因此在您的情况下应该没有任何区别,并且您可以调用js与您的小程序进行通信。当然,不可能在同一个调试器 session 中调试 gwt 和 applet 代码。

要从 GWT 调用小程序方法,您需要一个 jsni block ,例如:

 private native Object callFoo(String param) /*-{
    var appplet = document.getElementById('myapplet');
    return applet.foo(param);
 }-*/

要从您的小程序调用 GWT 代码,您需要另一个 jsni 方法来导出您的 gwt 代码(请注意,您必须在入口点调用它一次)

 private native void exportBar() /*-{
    window.bar = function(param) {
      return @com.examle.MyClass::myStaticMethod(*)(param);
    }
 }-*/

无论如何,我所知道的与小程序通信的最佳方法是使用 gwtai因为所需的所有样板代码(包装器和 jsni)都是自动生成的。

Gwtai,在托管模式下工作没有问题,虽然他们在他们的网站上说不期望它稳定,但它足够稳定,我已经在生产中使用了很长时间。

GwtAI provides easy to use cross-browser Java Applets integration to Google Web Toolkit (GWT) projects. GwtAI contains a number of utilities and helper classes, such as automatic creation of a wrapper widget and mechanism to communicate with Java Applets.

您需要下载两个文件( GwtAI-Client.jar 和 GwtAI-Core.jar )并包含在项目的类路径中,然后修改您的 .ui.xml 文件以继承 gwtai,然后您就可以开始编码了。

首先,您必须在 gwt 代码中定义 applet 接口(interface),以便使用延迟绑定(bind)的 GWT 编译器创建通信类实现。

 @ImplementingClass(MyClassImpl.class)
 @Height("60") @Width("350") @Archive("GwtAI-Client.jar, MyApp.jar")
 public interface MyApplet extends Applet {
   public Object foo();
 }

然后你必须在你的小程序代码中实现这个接口(interface)。

 public class MyClassImpl extends JApplet implements MyApplet {
   public Object foo(){
      return "Hello";
   }
 }

最后使用 gwt 应用程序中的小程序

 MyApplet applet = GWT.create(MyApplet.class);
 Object foo = applet.foo();

阅读GettingStarted指南以获取更多信息。

关于java - GWT 托管模式和小程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15853602/

相关文章:

gwt - 在Gwt中,如何使复选框的文本变为粗体?

在 UIBinder 中具有子元素配置的 gwt 自定义小部件(如 CustomButton)

java - GWT 编辑器使用 IsEditor<LeafValueEditor<Date>> 填充 Long 字段

java - GWT 2.4、GWTP 和 Hibernate + Maven 与 Eclipse

java - 带有复选框选择和行单击事件的 GWT CellTable

java - 如何在Avro模式中避免Map of Map

java - 从 Collection 到 SortedSet

Java:分割函数的默认值

java - YES_NO_OPTION JOptionPane 继续 'yes' 上的 java 代码

java - grails urlMappings dsl