GWT:向RootPanel添加Composite小部件时执行停止

时间:2011-11-07 21:54:49

标签: java gwt composite

我有一个扩展Composite(AbstractWhiteBoard)的抽象类。然后我有一个扩展AbstractWhiteBoard的具体类。当我实例化具体类并尝试将其添加到RootPanel时,程序只是停止执行。没有错误或任何输出将我引导到日志文件。我不知道出了什么问题。

这是我的抽象类:

public abstract class AbstractWhiteBoard extends Composite {
     /*
      * FIELDS
      */
     protected HorizontalPanel WhiteBoardWrapperPanel;

     public AbstractWhiteBoard( ) {
          WhiteBoardWrapperPanel = new HorizontalPanel();
          WhiteBoardWrapperPanel.setStyleName("WhiteBoard-Wrapper");
          initWidget(WhiteBoardWrapperPanel);
     }

     /*
      * ABSTRACT PUBLIC METHODS
      */
     abstract public void addNotecard( Notecard nc );
     abstract public void addPostit( Postit postit );

     /*
      * ABSTRACT PROTECTED HELPER METHODS
      */
     abstract protected void registerDragDropControllers();
 }

这是我的具体实现类:

public class ConcreteWhiteBoard extends AbstractWhiteBoard {

/*
 * CONTSTRUCTORS
 */
public ConcreteWhiteBoard() {
    super();
}


/*
 * PUBLIC METHOD OVERRIDES
 */
@Override
public void addNotecard(Notecard nc) {
    // TODO Auto-generated method stub

}

@Override
public void addPostit(Postit postit) {
    // TODO Auto-generated method stub

}


/*
 * PRIVATE HELPER METHOD OVERRIDES
 */
@Override
protected void registerDragDropControllers() {
    // TODO Auto-generated method stub
}
}

所以,发生了什么,我有这个代码:

AbstractWhiteBoard wb = new ConcreteWhiteBoard();
RootPanel.get().add(wb);
Window.alert("wb added!");

但是在将wb添加到RootPanel后,执行停止。警报语句甚至从未被调用过。没有错误,我在日志中看不到任何内容。

有一个扩展Composite的抽象类有什么问题吗?或者它是完全不同的东西,我只是没有看到?非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

看看gwt中未捕获的异常处理程序。如果发生运行时异常,则调用它。可以把它想象成一个围绕代码的全局尝试。

但是如果你的代码在模块加载的入口点内,请确保设置未捕获的异常处理程序并调用计时器中的下一个函数(以便未捕获的异常处理程序处于活动状态。

快速举例来看看:

http://code.google.com/p/mgwt/source/browse/src/main/java/com/googlecode/mgwt/examples/showcase/client/ShowCaseEntryPoint.java?repo=showcase

在Web模式下,您可以打开模拟堆栈(并获得有意义的堆栈跟踪)。你需要将它添加到你的gwt.xml文件中(仅用于调试目的,因为它很慢):

<set-property name="compiler.emulatedStack" value="true" />

<set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true" />
<set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true" />

答案 1 :(得分:0)

所以,这是你觉得有史以来最迟钝的开发者的那个时代之一。发生的事情是我同时运行了几个异步调用,我试图在实际创建之前引用其中一个调用返回的对象。对我来说,我对异步线程感到困惑。

非常感谢丹尼尔。您的意见引导我直接解决问题!