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 ライブラリの 1 つの null オブジェクトが原因のようです。呼び出しをコメントアウトする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
クラス名に注意してください)。