0

ホスト モードで GWT を起動するときに、アプレットと GWT アプリケーションの間で (およびその逆に) 通信することは可能ですか? アプレットは (LiveConnect を介して) JavaScript としか通信できないため、いいえと思いますが、GWT のホストされたモードでは JS が生成されません...

4

1 に答える 1

2

ホストモードは jvm のコードの一部を実行しますが、すべての jsni/dom/native 呼び出しはブラウザーに委任されるため、あなたのケースでは違いはなく、js を呼び出してアプレットと通信できます。もちろん、gwt とアプレット コードを同じデバッガ セッションでデバッグすることはできません。

GWT からアプレット メソッドを呼び出すには、次のような jsni ブロックが必要です。

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

また、アプレットから GWT コードを呼び出すには、gwt コードをエクスポートするための別の jsni メソッドが必要です (エントリポイントで 1 回呼び出す必要があることに注意してください)。

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

とにかく、アプレットと通信するための私が知っている最善の方法はgwtaiを使用することです。これは、必要な定型コード (ラッパーと jsni) がすべて自動的に生成されるためです。

Gwtai はホスト モードで問題なく動作し、彼らのサイトでは と言っていますがdon't expect it to be stable、十分に安定しており、本番環境で長い間使用しています。

GwtAI は、使いやすいクロスブラウザー Java アプレットを Google Web Toolkit (GWT) プロジェクトに統合します。GwtAI には、ラッパー ウィジェットの自動作成や Java アプレットと通信するためのメカニズムなど、多数のユーティリティとヘルパー クラスが含まれています。

2 つのファイル ( GwtAI-Client.jar と GwtAI-Core.jar ) をダウンロードしてプロジェクトのクラスパスに含める必要があります。その後、.ui.xmlgwtai を継承するようにファイルを変更すると、コーディングを開始できるようになります。

まず、遅延バインディングを使用する GWT コンパイラが通信クラスの実装を作成するように、gwt コードでアプレット インターフェイスを定義する必要があります。

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

次に、このインターフェイスをアプレット コードに実装する必要があります。

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

最後に、gwt アプリからアプレットを使用します

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

詳細については、GettingStartedガイドを参照してください。

于 2013-04-06T17:48:54.880 に答える