在GWT项目中使用GWT聚合​​物元素?

时间:2016-07-22 21:48:52

标签: gwt polymer

我正在尝试在项目中使用elemetos聚合物GWT,但收到异常。 这和调用聚合物元素的代码:

public void onModuleLoad () {
try {
RootPanel.get () add (new PaperButton ().);
} Catch (Exception e) {
e.printStackTrace ();
}

这是exessão:

Caused by: com.google.gwt.dev.shell.HostedModeException: JSNI rewriter found reference to non-existent field in a field reference or Java method tear-off: @ java.util.ArrayList :: array with at / vaadin / polymer /Polymer.java(479)

lib继承xml

 <Inherits name = "com.vaadin.polymer.Elements" />

使用的jar:

vaadin-gwt-polymer-elements-1.2.3.0.jar

完整的日志控制台:

jul 22, 2016 5:30:52 PM java.util.prefs.WindowsPreferences <init>
ADVERTÊNCIA: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
com.google.gwt.dev.jjs.InternalCompilerException: Unexpected error during visit.
    at com.google.gwt.dev.js.ast.JsVisitor.translateException(JsVisitor.java:482)
    at com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:469)
    at com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:444)
    at com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109)
    at com.google.gwt.dev.js.JsToStringGenerationVisitor.visit(JsToStringGenerationVisitor.java:201)
    at com.google.gwt.dev.js.ast.JsBinaryOperation.traverse(JsBinaryOperation.java:81)
    at com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:467)
    at com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:444)
    at com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109)
    at com.google.gwt.dev.js.JsToStringGenerationVisitor.visit(JsToStringGenerationVisitor.java:436)
    at com.google.gwt.dev.js.ast.JsExprStmt.traverse(JsExprStmt.java:41)
    at com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:467)
    at com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:444)
    at com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109)
    at com.google.gwt.dev.js.JsToStringGenerationVisitor.printJsBlock(JsToStringGenerationVisitor.java:939)
    at com.google.gwt.dev.js.JsSourceGenerationVisitor.visit(JsSourceGenerationVisitor.java:59)
    at com.google.gwt.dev.js.ast.JsBlock.traverse(JsBlock.java:52)
    at com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:467)
    at com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:444)
    at com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109)
    at com.google.gwt.dev.shell.Jsni.generateJavaScriptForHostedMode(Jsni.java:249)
    at com.google.gwt.dev.shell.Jsni.getJavaScriptForHostedMode(Jsni.java:237)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.createNativeMethods(ModuleSpaceOOPHM.java:52)
    at com.google.gwt.dev.shell.CompilingClassLoader.injectJsniMethods(CompilingClassLoader.java:1408)
    at com.google.gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1178)
    at com.google.gwt.dev.shell.CompilingClassLoader.loadClass(CompilingClassLoader.java:1223)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.vaadin.polymer.PolymerWidget.<init>(PolymerWidget.java:17)
    at com.vaadin.polymer.paper.widget.PaperButton.<init>(PaperButton.java:105)
    at com.vaadin.polymer.paper.widget.PaperButton.<init>(PaperButton.java:98)
    at br.client.Aprend.onModuleLoad(Aprend.java:29)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:423)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:530)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:368)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.gwt.dev.shell.HostedModeException: JSNI rewriter found reference to non-existent field in a field reference or java method tear-off: @java.util.ArrayList::array at com/vaadin/polymer/Polymer.java(479)
    at com.google.gwt.dev.shell.Jsni$JsSourceGenWithJsniIdentFixup.visit(Jsni.java:115)
    at com.google.gwt.dev.js.ast.JsNameRef.traverse(JsNameRef.java:108)
    at com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:467)
    ... 38 more

1 个答案:

答案 0 :(得分:1)

使用gwt-polymer-elements版本(1.2.3.0)需要使用GWT 2.8快照,因为使用的是JsInterop。请参阅Vaadin的正式通知:

  

注意:我们广泛使用JsInterop GWT中的一个新功能,以便轻松地与JavaScript交互。它在GWT-2.7中是实验性的并且在GWT-2.8.0中是稳定的,但是从gwt-polymer-elements-1.2.1.0.beta1开始,我们不再支持2.7.0,它也不是遗留JsInterop语法。如果在运行应用程序时JavaScript控制台中出现未捕获的java.lang.ClassCastException错误,则表示您没有使用GWT-2.8.0-SNAPSHOT

此外,您的语法错误,

browser = Watir::Browser.new(:chrome, :switches => %w[--user-data-dir=/home/someuser/.config/google-chrome --load-extension=/home/someuser/.config/google-chrome/Default/Extensions/cfhdojbkjhnklbpkdaibdccddilifddb/1.12.1_0 --no-first-run]) 应更改为RootPanel.get () add (new PaperButton ().);

我使用GWT 2.7(SuperDevMode)测试了版本1.1.3.0-alpha1,它运行正常。所以请检查你的GWT版本。

还有一个提示:对于跨浏览器支持,您应该添加

RootPanel.get().add(new PaperButton());

到HTML文件的头部。