2012-01-18 3 views
19

Я запускаю приложение GWT в режиме размещения. Спорадически я получаю странный HostedModeException, жалующийся на тип значения JS, возвращаемого из JSNI. Иногда во время десериализации:Что-то, кроме int было возвращено из метода JSNI

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) 

иногда в:

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) 

еще раз на

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) 

Может кто-нибудь помочь мне в этом? Я использую GWT 2.4.0, Google Chrome 16.0.912.75 и GWT Developer Plugin 1.0.9738.

+0

Я хотел бы помочь, так как иногда получаю такое случайное исключение ... но я понятия не имею! В любом случае, это не влияет на мою отладку, поэтому я просто живу с ней ... но было бы неплохо узнать, что стоит за этим. – Renato

+0

May case был похож на ваш, происходил раз в месяц или около того, но теперь в проекте, над которым я сейчас работаю, это происходит периодически, много раз в день. Вот почему я чувствую, что может быть что-то не так с моей конфигурацией. К сожалению, это также трудно воспроизвести. По словам юзио, это волшебство. – Saintali

+0

Этот вопрос дублируется по адресу http://stackoverflow.com/questions/9984298/gwt-something-other-than-an-int-was-returned-from-jsni-method, где дается обход. – Glenn

ответ

17

По какой-то магической причине хром очень плохо работает с GWT DevMode. Случайное исключение нулевого указателя при разборе ошибок JSON, JSNI при работе с GXT, исключения для удаленной смерти - очень распространенные проблемы. Это известная проблема, поэтому большинство людей не используют GWT DevMode с Chrome.

+0

Странно, поскольку оба они происходят из Google. На самом деле у меня есть унаследованное приложение, и портирование в Firefox требует дополнительных усилий :( – Saintali

+0

странно, нам пришлось создать отдельный JSON-парсер для нашего проекта, потому что DevMode в Chrome всегда сокрушился со стандартной реализацией. К сожалению, таких обходных решений для фреймворков нет например, GXT. – jusio

+2

Стоит отметить, что это происходит только в режиме dev (скомпилированный код будет в порядке), и только с некоторыми jsni, некоторое время). Это давняя проблема, и в конечном итоге это произойдет с любым jsni. http://code.google.com/p/google-web-toolkit/issues/detail?id=5778 –