Web applications GWT扩展decorpanel并添加到rootPanel
我对使用gwt还不熟悉,尽管我已经开始掌握一些窍门。我今天遇到的一个令人困惑的情况是:。(这是为了简化我的问题) 由于某种原因,我的问题出现在线路上:Web applications GWT扩展decorpanel并添加到rootPanel,web-applications,gwt,jakarta-ee,Web Applications,Gwt,Jakarta Ee,我对使用gwt还不熟悉,尽管我已经开始掌握一些窍门。我今天遇到的一个令人困惑的情况是:。(这是为了简化我的问题) 由于某种原因,我的问题出现在线路上: RootPanel.get("reference").add(log); 我得到一个空指针异常…指向上面一行的堆栈上的行是: java.lang.NullPointerException: null at com.google.gwt.user.client.ui.Panel.doAttachChildren(Panel.java:16
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中,并在其中创建一个DecororPanel时,没有出现空指针异常。为什么会这样,我怎样才能修复它。这似乎是个简单的问题,但我不确定该往哪个方向走。有人有主意吗
面板中的此行发生空指针异常:
对于(Iterator it=Iterator();it.hasNext();){以上代码对我来说没有任何问题。你能发布你正在使用的gwt和OS的版本吗?确保你的html中有以下DIV
<div id="reference"></div>
如BlackPanther所说,如果上述所有操作都失败,则最有可能的错误是您在基本HTML页面中缺少了
或具有该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页面中找不到元素。因此,我认为这是由于库中的jar不正确。无论哪种方式,它现在都可以工作。不过,我还有一个问题。如何从没有onModuleLoad的类向根面板添加面板。这可能吗?正如我提到的,当我放置所有的将MyPanel代码放入ClassA中的onModuleLoad中,而不是在单独的类中定义它。但是,对于我来说,将所有ui放在一个类中并不是一个不可接受的解决方案,你知道吗?哈。我还应该提到,即使存在错误,也会显示正确的ui。还有什么想法吗?不幸的是,当错误发生时,我正在使用vista我不确定这是否会影响任何事情,因为唯一的区别是我在哪里定义ui。我尝试的应该很简单。对吗?我累了,刚刚醒来,请原谅上面的打字错误。例如。acceptable@John,我刚刚试过你说的,看看我的答案,我几乎可以肯定它与你在e app。确保浏览器缓存没有与您玩,并且使用的是过期版本的HTML页面。清除浏览器缓存以确保。是的。这是可能的。onModuleLoad方法只是应用程序的入口点。RootPanel.get().add(panel)可以在任何地方。如果您说RootPanel.get(“somediv”).add(panel)这样,它将搜索id为“somediv”的div。就是这样。将panel添加到RootPanel和onModuleLoad方法之间没有链接。
/**
* 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")