GWT Uncaught IllegalArgumentException

时间:2012-05-21 12:09:49

标签: gwt

有时我的GWT应用程序会在下面报告“未捕获的IllegalArgumentException”。错误日志有效地掩盖了应用程序的任何可能原因。在这种情况下,您如何以实际方式确定问题的根源?

[ERROR] [mygwtapp] Uncaught exception escaped

java.lang.IllegalArgumentException: Something other than a Java object was returned from JSNI method '@com.google.gwt.core.client.impl.Impl::apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)': JS value of type boolean, expected java.lang.Object
    at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:178)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:271)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
    at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)

3 个答案:

答案 0 :(得分:3)

如果您没有使用Chrome,在这种情况下它是known bug,唯一的解决方案是切换到Firefox或IE for DevMode或等待SuperDevMode(预计GWT 2.5,到在一个月左右的时间内发布),那么你最好的选择是尝试在产品模式下重现它。

您还可以检查您的JSNI方法(因为它可能来自您自己的代码),因为它可能会返回一个布尔值而不是一个对象(在这个特定情况下)。

答案 1 :(得分:2)

如果从调用的JSNI函数的返回值类型不匹配,则会发生此错误。

例如:

public class GWTTest implements EntryPoint 
{ 
    public void onModuleLoad() { 
        if(get()==false){ 
            System.out.println(get()); 
        } 
    } 
    private native Boolean get()/*-{ 
        return false; 
    }-*/; 
}

这里你会收到错误“java.lang.IllegalArgumentException:Java对象以外的东西 从JSNI方法返回“

请记住:javascript中没有自动装箱。

你应该返回布尔值,而不是布尔值。

答案 2 :(得分:2)

使用JSNI,您必须return only

  • 扩展JavaScriptObject的对象
  • 原始&字符串(没有,因为JS中没有一个
  • 来自Java代码的Java对象或数组

因此,如果原语不符合您的需要,您可以返回布尔或制作您自己的overlay type。但另外坚持使用原始布尔值。

相关问题