2012-11-06 68 views
5

我正在開發一些自定義小部件,我希望能夠與UiBinder一起使用。不幸的是我一直在浪費我的生命與追逐以下錯誤:GWT延遲綁定失敗的自定義類:沒有類匹配「...」在urn:import:

無級匹配「......」金塔:進口:...

這似乎是被拋出的捕獲所有異常的任何時候在類中有任何錯誤都會阻止GWT編譯器處理它。這包括類的整個依賴樹中的任何內容。

爲了節省我自己和任何遇到同樣問題的人一段時間和痛苦,讓我們編輯一個列表,列出最令人意想不到的原因。我將從最新的一個開始,這使我決定在這裏發佈。

回答

1

我寫了一個輔助類,這個小部件在其依賴關係樹內深處使用。

對於這個輔助類,我告訴Eclipse自動生成hashCode()equals(...)函數。該類包含類型爲double的字段,Eclipse爲其生成使用Double.doubleToLongBits()的代碼。

原因GWT未在其版本Double上實施此方法。但是,當然,如果我在GWT-App的Java代碼而不是UiBinder中使用這個小部件,Eclipse也不會將其視爲可能的編譯錯誤,也不會在Dev模式下引發任何問題。

3小時下來......很好...... Yay有幫助的錯誤信息。

UPDATE:

作爲GWT 2.5.0(RC1)GWT現在支持Double.doubleToLongBits()使該特定錯誤過時,但缺少JRE仿真的一般錯誤機制依然存在,可能會體現在一個的同樣無益的方式。

2

我寫過一個使用GWT JSON功能但未將com.google.gwt.json.JSON導入模塊的組件。

感謝這裏你的信息,這是隻有2個小時血本無歸......

3

我使用的是CellList正是如此:在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)); 
} 

注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)); 
} 
相關問題