我想爲使用JSNI的GWT創建WebSockets的簡單綁定,但每次調用JSNI方法時都會收到異常。簡化的類定義是休耕:
與JSNI整合GWT到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工作者創建一個類似的綁定,但我得到了完全相同的錯誤,所以我決定暫停開發thos e綁定並嘗試更簡單的操作,直到找到導致此異常的原因。
目標對我來說是無法得到的WebSockets的工作實現的,但要弄清楚爲什麼我收到此錯誤。我的實現和gwt-comet幾乎完全相同,但他顯然沒有得到這個例外。如果我不明白原因,我肯定會再次遇到這個問題。 –
我試過你的代碼,我沒有得到錯誤。實際上,如果我用真正的websocket服務器嘗試它,Socket Socket = Socket.connect(「ws://echo.websocket.org」)' –
這是意想不到的。我使用NetBeans的GWT4NB插件,該插件旨在與2.0以上版本的sdk配合使用,但它目前使用的是2.3 sdk。你介意告訴我你正在使用哪個IDE以及SDK的哪個版本? –