我正在开发几个我希望能够与 UiBinder 一起使用的自定义小部件。不幸的是,我一直在浪费我的生命来追踪以下错误:
urn:import:...中没有匹配“...”的类
这似乎是在类中出现任何阻止 GWT 编译器处理它的错误时抛出的包罗万象的异常。这包括类的整个依赖关系树中的任何内容。
为了节省我自己和遇到相同问题的任何人一些时间和痛苦,让我们在这里编制一份清单,列出最意想不到和最难找到的原因。我将从我最新的一个开始,这让我决定在这里发布这个。
因此,我正在使用 CellList:
private static RelationshipViewerUiBinder uiBinder = GWT.create(RelationshipViewerUiBinder.class);
@UiField(provided=true)
CellList<String> prioritisedDisplay;
public RelationshipViewer() {
prioritisedDisplay = new CellList<>(new TextCell());
initWidget(uiBinder.createAndBindUi(this));
}
注意 CellList 上的 Java 7 样式 <>。尽管我的 IDE 提出了相反的抗议,但事实证明您确实需要在该新调用中明确地说 CellList< String> ,否则它将无法编译,而您得到的只是上述错误。顺便说一句,谢谢,这个问题的存在促使我仔细检查了我的代码,并且可能为我节省了几个小时!这修复了它:
private static RelationshipViewerUiBinder uiBinder = GWT.create(RelationshipViewerUiBinder.class);
@UiField(provided=true)
CellList<String> prioritisedDisplay;
public RelationshipViewer() {
prioritisedDisplay = new CellList<String>(new TextCell());
initWidget(uiBinder.createAndBindUi(this));
}
我编写了一个使用 GWT JSON 功能的组件,但没有将 com.google.gwt.json.JSON 导入到模块中。
多亏了您在这里的留言,这才花了 2 个小时才付诸东流……
我写了一个帮助类,这个小部件在它的依赖树深处的某个地方使用。
对于这个助手类,我告诉 Eclipse 自动生成hashCode()
andequals(...)
函数。该类包含一个类型字段double
,Eclipse 为其生成使用的代码Double.doubleToLongBits()
。
事实证明 GWT 没有在其版本的Double
. 但是当然,如果我在 GWT-App 的 Java 代码中而不是在 UiBinder 中使用小部件,Eclipse 也不会将其检测为可能的编译错误,也不会在开发模式下导致任何问题。
3 小时耗尽... 太好了... 是的,有用的错误消息。
更新:
从 GWT 2.5.0 (RC1) 开始,GWT 现在支持Double.doubleToLongBits()
使这个特定错误过时,但是缺少 JRE 仿真的一般错误机制仍然存在,并且可能会以类似无益的方式表现出来。
我试图在 UiBinder .ui.xml 中使用GwtQuery DragAndDropCellTree,这是不可能的,因为 DragAndDropCellTree 没有零参数构造函数。