0

テストのために、playnプロジェクトでcom.google.gwt.user.client.WindowパッケージのWindow.alert()関数を使用しようとしました。しかし、プログラムを実行しようとすると、次のようなエラーメッセージが表示されます。

"原因:java.lang.UnsupportedOperationException:エラー:GWT.create()はクライアントコードでのみ使用できます!たとえば、サーバーコードから呼び出すことはできません。単体テストを実行している場合は、テストケースが拡張されていることを確認してくださいGWTTestCaseとそのGWT.create()は、初期化子またはコンストラクター内から呼び出されません。」

よくわかりません。私のplaynプロジェクトでは、クライアント側のコードのみが使用されています。だから問題は何ですか?

4

1 に答える 1

0

GWT.create() は現在、gwt トランクの純粋な Java でサポートされています。私は playn プロジェクトでそれを自分で使用しています {わずかな不具合がありますが: GWT コンパイラに無効な CompilationUnits の剪定を強制的に停止させます}。

トランクをダウンロードしてビルドすると、エラーの原因となっているクラスの ClassInstantiators を登録することで、GWT.create() の問題を回避できます。この場合、Window クラスには、jvm が Window クラスにヒットしたときにこのエラーをスローする WindowImpl の静的インスタンスがあります。WindowImpl の ClassInstantiator を登録すると、これは発生しません。残念ながら、Window.alert メソッドはネイティブの js に直接渡されるため、依然として爆撃される可能性があります。

トランクから gwt をビルドする方法がわからない場合や、gwt をビルドしたい場合は、私にメールを送信してください。jar を送信できます。それでも .alert() がネイティブ メソッドであることに問題がある場合はお知らせください。.alert() を WindowImpl シングルトンに延期するカスタム トランク ビルドを作成します。警告メッセージ ;-}

冒険したい場合は、gwt トランクをダウンロードし、Window に移動し、静的アラート メソッドを WindowImpl のインスタンス レベル メソッドにコピーし、元のメソッドを WindowImpl に委譲してから、Java コードで ServerGwtBridge.register(WindowImpl.class 、new ClassInstantiator(){...}) を呼び出し、Java および Android の .alert() に必要な実装を返します。

于 2012-05-31T16:01:14.423 に答える