GWT扩展了DecoratorPanel并添加到rootPanel

时间:2009-12-08 02:07:16

标签: web-applications gwt java-ee

我是新手使用gwt,虽然我开始掌握一切。我今天遇到的一个令人困惑的情况如下。 (这是为了简化我的问题而缩写)

  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中的所有代码放入onModuleLoad方法中的ClassA并在那里创建了一个DecoratorPanel时,没有空指针异常。为什么这样,我该如何解决它。这似乎是一个简单的问题,但我不确定要走哪个方向。有人有想法吗?

空白指针异常发生在Panel中的这一行:

for(Iterator it = iterator(); it.hasNext();){

3 个答案:

答案 0 :(得分:1)

上面的代码对我没有任何问题。你可以发布你正在使用的gwt和操作系统的版本。确保你在你的HTML中使用了DIV。

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

如果一切都很好仍然无法正常工作,请尝试以下

 RootPanel.get().add(mp);

如果首先失败,请在http://groups.google.com/group/Google-Web-Toolkit?pli=1该网站

中记录错误

答案 1 :(得分: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") 

返回null,因为在HTML页面中找不到该元素。

答案 2 :(得分:0)

所以,这是因为我相信库里有一个不正确的jar。无论哪种方式,它现在都有效。我有另外一个问题。如何从没有onModuleLoad的类中将面板添加到根面板。有可能吗?