首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么无法检测到JavascriptObject的运行时空指针?

为什么无法检测到JavascriptObject的运行时空指针?
EN

Stack Overflow用户
提问于 2012-04-09 15:31:19
回答 1查看 503关注 0票数 0

经过一些调试,我发现"com.google.gwt.event.shared.UmbrellaException:One或更多的异常捕获,请参阅full set in UmbrellaException#getCauses‘when full:nsIDOMEventListener::handleEvent“(在web模型中)是由运行时空pointer.Question引起的。model.Actually是为什么这种运行时空指针异常没有在主机model.Actually下抛出,blow代码不会抛出任何异常,甚至在我的笔记本电脑(gwt 2.4+java 7 64bit+ubuntu 12.04 64bit+eclipse 3.7)中会弹出警报(gwt 2.4+java 7 64bit+ubuntu 12.04 64bit+eclipse 3.7).Anybody知道如何在JavascriptObject指针上发生运行时null时强制执行eclipse抛出异常。

代码语言:javascript
复制
public class GWTTest implements EntryPoint
{
    public static class JsObj extends JavaScriptObject
    {
         protected JsObj()
         {
         }

         public final native void setValue(String Value)/*-{
                this.Value=Value;
                alert(Value);
         }-*/;
    }

    public void onModuleLoad()
    {
         JsObj jsObj = null;
         jsObj.setValue("val");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-09 23:51:31

编译器执行许多优化以将GWT/Java转换为Javascript。

  • 类型和方法是最终的-这使得后面的步骤能够理解哪些方法需要正常调度,哪些方法可以静态,只需调用单个实现。在可能的情况下,
  • 方法是静态的,这允许方法在可能和合理的情况下内联
  • ,方法是内联的

也就是说..。当我编译您的示例时,onModuleLoad()的主体被优化为:

代码语言:javascript
复制
null.nullMethod();

这是GWT编译器表示‘这永远不会起作用’的方式--它注意到该值始终为null,因此该方法不能在其上调用。但在开发模式下,显然空对象指向JavaScript中的window对象。这是在http://code.google.com/p/google-web-toolkit/issues/detail?id=6625的GWT项目中提交的。

如果您需要确保不对null执行操作,请在调用方法之前测试null -如果在像您这样的测试中,值始终为null,则会对方法进行优化。运行时异常无论如何都不应该用于控制代码,因此您永远不应该依赖NullPointerException在代码中执行任何操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10070254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档