我是新手使用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();){
答案 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的类中将面板添加到根面板。有可能吗?