0

我正在尝试运行 GWT Elemental 示例(来自 GWT 2.5.1 存储库),它在运行时给了我一个异常。我必须对代码进行一些更改才能使其运行,我猜这是对 Elemental 的更改未反映在示例代码中的结果。这是代码,并注明了我的更改:

@Override
public void onModuleLoad() {
  final ButtonElement btn = getDocument().createButtonElement();
  btn.setInnerHTML("w00t?");
  btn.getStyle().setColor("red");
  getDocument().getBody().appendChild(btn);
  final DivElement div = getDocument().createDivElement();
  getDocument().getBody().appendChild(div);
  EventListener listener = new EventListener() {
    @Override
    public void handleEvent(Event evt) {
      final XMLHttpRequest xhr = getWindow().newXMLHttpRequest();
      xhr.setOnload(new EventListener() {
        @Override
        public void handleEvent(Event evt2) {
          div.setInnerHTML(xhr.getResponseText());
        }
      });
      xhr.open("GET", "/snippet.html");
      xhr.send();
      getWindow().setTimeout(new TimeoutHandler() { // *** changed from "new Window.TimerCallback()"
        @Override
        public void onTimeoutHandler() { // *** changed from "public void fire()"
          getWindow().alert("timeout fired");
        }
      }, 1000);
      btn.removeEventListener(Event.CLICK, this, false);
    }
  };
  btn.addEventListener(Event.CLICK, listener, false);
}

原始代码在这里:ElementalExample.java

异常发生在行上:btn.addEventListener(Event.CLICK, listener, false);,并且似乎是由其中一个 JavaScript 库中的空对象引起的。如果我注释掉btn.addEventListener()调用,那么页面会显示在浏览器中,带有按钮(虽然它是非功能性的,当然,没有事件监听器)。有没有其他人试图运行这个例子?如果是这样,您对在最新版本的 GWT 中运行有什么建议吗?

这是堆栈跟踪:

com.google.gwt.core.client.JavaScriptException: (String) : Invoking an instance method on a null instance
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at com.google.gwt.dev.shell.ModuleSpace.createJavaScriptException(ModuleSpace.java:80)
 at com.google.gwt.dev.shell.ModuleSpace.createJavaScriptException(ModuleSpace.java:64)
 at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:60)
 at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
 at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
 at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
 at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
 at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
 at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
 at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
 at elemental.js.dom.JsElementalMixinBase$.addEventListener$(JsElementalMixinBase.java)
 at com.google.gwt.core.client.JavaScriptObject$.elemental_html_ButtonElement_addEventListener(JavaScriptObject.java)
 at org.greatlogic.elementalfile.client.ElementalFileEntryPoint.onModuleLoad(ElementalFileEntryPoint.java:48)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:406)
 at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
 at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526)
 at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
 at java.lang.Thread.run(Unknown Source)

(请注意,我已将代码粘贴到我自己的项目中,因此也粘贴了org.greatlogic.elementalfile.client.ElementalFileEntryPoint类名)。

4

0 回答 0