ホスト モードで GWT を起動するときに、アプレットと GWT アプリケーションの間で (およびその逆に) 通信することは可能ですか? アプレットは (LiveConnect を介して) JavaScript としか通信できないため、いいえと思いますが、GWT のホストされたモードでは JS が生成されません...
1 に答える
ホストモードは 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.xml
gwtai を継承するようにファイルを変更すると、コーディングを開始できるようになります。
まず、遅延バインディングを使用する 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ガイドを参照してください。