从JSNI方法返回除int之外的东西

Sai*_*ali 19 gwt jsni gwt-hosted-mode

我正在托管模式下运行GWT应用程序.偶尔我会HostedModeException抱怨从JSNI返回的JS值的类型.有时它是在反序列化期间:

 com.google.gwt.dev.shell.HostedModeException: Something other than an int was returned from JSNI method '@com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader::readInt()': JS value of type boolean, expected int
    at com.google.gwt.dev.shell.JsValueGlue.getIntRange(JsValueGlue.java:266)
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:144)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeInt(ModuleSpace.java:247)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeInt(JavaScriptHost.java:75)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.readInt(ClientSerializationStreamReader.java)
Run Code Online (Sandbox Code Playgroud)

有时在:

 com.google.gwt.dev.shell.HostedModeException: Something other than an int was returned from JSNI method '@com.google.gwt.user.client.impl.DOMImpl::eventGetTypeInt(Ljava/lang/String;)': JS value of type null, expected int
    at com.google.gwt.dev.shell.JsValueGlue.getIntRange(JsValueGlue.java:266)
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:144)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeInt(ModuleSpace.java:247)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeInt(JavaScriptHost.java:75)
    at com.google.gwt.user.client.impl.DOMImpl.eventGetTypeInt(DOMImpl.java)
    at com.google.gwt.user.client.impl.DOMImpl.eventGetTypeInt(DOMImpl.java:62)
    at com.google.gwt.user.client.DOM.eventGetType(DOM.java:602)
    at com.google.gwt.user.client.Event$.getTypeInt$(Event.java:695)
    at com.extjs.gxt.ui.client.util.BaseEventPreview.onPreviewNativeEvent(BaseEventPreview.java:139)
Run Code Online (Sandbox Code Playgroud)

再一次

com.google.gwt.dev.shell.HostedModeException: Something other than a float was returned from JSNI method '@com.extjs.gxt.ui.client.util.Util::parseFloat(Ljava/lang/String;F)': JS value of type boolean, expected float
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:118)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeFloat(ModuleSpace.java:235)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeFloat(JavaScriptHost.java:67)
    at com.extjs.gxt.ui.client.util.Util.parseFloat(Util.java)
    at com.extjs.gxt.ui.client.core.El.getFrameSize(El.java:1081)
    at com.extjs.gxt.ui.client.core.El.setSize(El.java:2702)
    at com.extjs.gxt.ui.client.widget.BoxComponent.setSize(BoxComponent.java:501)
    at com.extjs.gxt.ui.client.widget.BoxComponent.setHeight(BoxComponent.java:320)
Run Code Online (Sandbox Code Playgroud)

谁可以帮我这个事?我使用的是GWT 2.4.0,谷歌浏览器16.0.912.75和GWT Developer Plugin 1.0.9738.

jus*_*sio 17

由于一些神奇的原因,chrome与GWT DevMode的工作非常糟糕.在解析JSON时,随机空指针异常,JSNI在使用GXT时返回类型错误,远程死亡异常是一个非常常见的问题.这是众所周知的问题,这就是为什么大多数人都没有在Chrome中使用GWT DevMode.

  • 值得指出的是,这只发生在开发模式下(编译后的代码会很好),并且只有一些jsni,有些时候).这是一个长期存在的问题,最终将发生在任何jsni上.http://code.google.com/p/google-web-toolkit/issues/detail?id=5778 (2认同)
  • 感谢Colin,我发现它很奇怪,因为这个bug是在2010年12月提交的,它与GWT 2.1.0和Chrome 10.0.612.1有关.从那以后几个世纪过去了. (2认同)