Исключение в простом примере GWT Elemental
Я пытаюсь запустить пример 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
имя_класс).