【问题标题】:This UIObject's element is not set; you may be missing a call to either Composite.initWidget() or UIObject.setElement()此 UIObject 的元素未设置;您可能错过了对 Composite.initWidget() 或 UIObject.setElement() 的调用
【发布时间】:2013-06-25 01:39:55
【问题描述】:

运行我的 GWT/Errai 应用程序时,我收到以下错误消息:

00:00:00.000 [错误] 无法加载模块入口点类 org.jboss.errai.ioc.client.Container(请参阅相关的异常 详细信息)java.lang.RuntimeException:IOC 容器中的严重错误 引导在 org.jboss.erai.ioc.client.Container.bootstrapContainer(Container.java:69) 在 org.jboss.errai.ioc.client.Container.onModuleLoad(Container.java:34) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) 在 com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 在 com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525) 在 com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 在 java.lang.Thread.run(Thread.java:722) 引起: java.lang.AssertionError:此 UIObject 的元素未设置;你可以 缺少对 Composite.initWidget() 或 UIObject.setElement() 在 com.google.gwt.user.client.ui.UIObject.getElement(UIObject.java:527) 在 org.jboss.errai.ui.shared.TemplateUtil.compositeComponentReplace(TemplateUtil.java:61) 在 org.jboss.errai.ioc.client.BootstrapperImpl$65$1.init(BootstrapperImpl.java:1623) 在 org.jboss.errai.ioc.client.BootstrapperImpl$65$1.init(BootstrapperImpl.java:1) 在 org.jboss.errai.ioc.client.container.CreationalContext.resolveAllProxies(CreationalContext.java:351) 在 org.jboss.errai.ioc.client.container.CreationalContext.finish(CreationalContext.java:312) 在 org.jboss.errai.ioc.client.Container.bootstrapContainer(Container.java:59) 在 org.jboss.errai.ioc.client.Container.onModuleLoad(Container.java:34) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) 在 com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 在 com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525) 在 com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 在 java.lang.Thread.run(Thread.java:722)

我已经完成了mvn clean compile package gwt:run

【问题讨论】:

    标签: java gwt errai


    【解决方案1】:

    这可能意味着你使用了一个Composite,而你没有调用initWidget(Widget)

    javadoc for Composite 的摘录

    A type of widget that can **wrap** another widget, hiding the wrapped widget's methods.

    如果您不调用initWidget(),则没有包装的小部件并导致此错误消息。

    如果您 extends UiObject 而不调用 setElement() 也会发生这种情况,但这是一个罕见的用例。

    【讨论】:

    • 是的,但是查看日志,错误是在 erai 库中引发的
    • 在我的例子中,我在 Composite 中有一个组件,它没有调用 initWidget(Widget)。只需在其默认构造函数中添加该调用即可解决问题。我以为 super() 会为我调用它;它没有 - 我有自己的 UiBinder 用于该组件,也许这就是原因。
    • 是否可以通过某种方式检查此 initWidget 之前是否被调用过?
    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2021-02-24
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多