2009-12-08 102 views
0

我是新來的使用gwt,雖然我開始得到的東西的hang。。我今天遇到的一個令人困惑的情況如下。 (這是縮寫爲簡化我的問題)GWT擴展DecoratorPanel並添加到rootPanel

public class MyPanel extends DecoratorPanel{ 

    public MyPanel(){ 

    final TextBox tb = new TextBox(); 
    tb .setText("test"); 

    this.add(tb); 

    tb .setFocus(true); 

     } 

    } 






public class ClassA implements EntryPoint(){ 

    public void onModuleLoad(){ 

     MyPanel mp = new MyPanel(); 
     RootPanel.get("reference").add(mp); 
     } 


    } 

出於某種原因在該行出現我的問題:

RootPanel.get("reference").add(log); 

我得到一個空指針異常...堆棧的線上線在高於該線的點是:

java.lang.NullPointerException: null 
    at com.google.gwt.user.client.ui.Panel.doAttachChildren(Panel.java:163) 
    at com.google.gwt.user.client.ui.Widget.onAttach(Widget.java:259) 
    at com.google.gwt.user.client.ui.Widget.setParent(Widget.java:393) 
    at com.google.gwt.user.client.ui.Panel.adopt(Panel.java:119) 
    at com.google.gwt.user.client.ui.ComplexPanel.add(ComplexPanel.java:86) 
    at com.google.gwt.user.client.ui.AbsolutePanel.add(AbsolutePanel.java:80) 

所以我認爲這將只是一個簡單的問題,但是,當我把所有的代碼MyPanel到ClassA的在onModuleLoad方法,只是創造了月oratorPanel在那裏,沒有空指針異常。這是爲什麼,我該如何解決它。這似乎是一個簡單的問題,但我不確定要走哪個方向。任何人有想法?

的零指示字例外發生在這條線在面板:

爲(迭代它=迭代(); it.hasNext();){

回答

0

所以,這是由於我相信圖書館裏有一個不正確的罐子。無論哪種方式它現在的作品。我還有一個其他問題。你怎麼能從沒有onModuleLoad的類中將面板添加到根面板。可能嗎?

+0

是的。它是可能的.onModuleLoad方法只是你的application.RootPanel.get().add(面板)的入口點可以在任何地方。如果你說RootPanel.get(「somediv」)。add(面板)就像它將搜索ID爲「somediv」的div。這就是它。將面板添加到RootPanel和onModuleLoad方法之間沒有關係。 – DonX

1

上面的代碼爲我工作沒有任何問題。你可以發佈你正在使用的gwt和OS的版本。確保你的html中有下面的DIV。

<div id="reference"></div> 

如果一切正常仍是不工作的方式嘗試以下

RootPanel.get().add(mp); 

如果上述所有失敗記錄錯誤在http://groups.google.com/group/Google-Web-Toolkit?pli=1該網站

+0

正如我所提到的,當我將所有MyPanel代碼放入ClassA中的onModuleLoad而不是在單獨的類中定義它時,此代碼可行。然而,對於我來說,把我所有的用戶界面都放在一個你認識的課程中,這真的不是一個很好的解決方案嗎?哈。我也應該提到,即使存在錯誤,也會顯示正確的UI。還有什麼想法?不幸的是,當我發現錯誤時,我不確定這會影響任何東西,因爲唯一的區別就是我定義了UI。我正在嘗試的應該很簡單..對吧? – John

+0

我很累,剛醒來就打擾了上面的錯別字。即可接受 – John

+0

@John,我剛剛嘗試過您所說的內容,請參閱我的答案,並且我幾乎可以確定它與您在應用中提供的HTML頁面有關。確保瀏覽器緩存不與您一起玩,並且正在使用HTML頁面的過時版本。確保清除瀏覽器緩存。 –

0

正如BlackPanther說,最有可能的錯誤是您在基本html頁面中缺少<div id="reference"></div>或其他具有該id的HTML元素。

我已經試過

/** 
* This is the entry point method. 
*/ 
public void onModuleLoad() { 
    // MyPanel mp = new MyPanel(); 
    DecoratorPanel mp = new DecoratorPanel(); 
    final TextBox tb = new TextBox(); 
    tb.setText("test"); 
    mp.add(tb); 
    tb.setFocus(true); 
    RootPanel.get("reference").add(mp); 
} 

,它會拋出同樣的錯誤。

RootPanel.get("reference") 

由於在HTML頁面中找不到該元素而返回null。