JSNIを使用してGWTのWebSocket用の単純なバインディングを作成しようとしていますが、JSNIメソッドが呼び出されるたびに例外が発生し続けます。単純化されたクラス定義は、休閑の通りです:
JavaScriptをJSNIでGWTに統合する際の問題
public class Socket extends JavaScriptObject{
protected Socket() {}
public static native Socket connect(String url) /*-{
return new WebSocket(url);
}-*/;
}
ライン使用して、Socketオブジェクトをインスタンス化しようとしている間:
Socket socket = Socket.connect("http://www.google.com");
を私は休閑例外を取得し、私はなぜ知らない:
をjava.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396)
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:193)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:510)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassFormatError: Illegal method name "$" in class edu/catalindumitru/gwt/socket/Socket
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at com.google.gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1078)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at edu.catalindumitru.gwt.steel.client.GameCore.onModuleLoad(GameCore.java:32)
... 9 more
これまで型付き配列やWebワーカーのために同様のバインディングを作成しようとしましたが、まったく同じエラーが発生していましたので、 eのバインディングと私はこの例外の理由を見つけることができるまで簡単に何かを試してください。
目標が欠けているがWebSocketを実装の作業を取得するために、私はこのエラーを取得しています理由を理解することではありません。私の実装とgwt-cometはほぼ同じですが、明らかにこの例外が発生していません。私はそれが理由を理解しなければ、私は再びこの問題にぶつかると確信しています。 –
あなたのコードを試しましたが、エラーは発生しません。実際には、実際のWebSocketサーバー 'Socket socket = Socket.connect(" ws://echo.websocket.org ")で試してみるとうまくいきます。 –
予期せぬことです。私はNetBeans用のGWT4NBプラグインを使用していますが、これはバージョン2.0までのsdkで動作するように設計されていますが、現在は2.3 sdkを使用しています。使用しているIDEとSDKのバージョンを教えていただけますか? –