GWT: выполнение останавливается при добавлении виджета Composite в RootPanel - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть абстрактный класс, расширяющий 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 ]

1 голос
/ 08 ноября 2011

взгляните на необработанный обработчик исключений в gwt. если возникает исключение времени выполнения, оно вызывается. Думайте об этом как о глобальной попытке поймать ваш код.

Но если ваш код находится внутри вашей точки входа при загрузке модуля, обязательно установите обработчик необработанных исключений и вызовите следующую функцию в таймере (чтобы обработчик необработанных исключений был активным.

Для быстрого примера посмотрите здесь:

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

В веб-режиме вы можете включить эмулируемый стек (и получить значимые трассировки стека). Вам нужно добавить это в ваш файл 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" />
0 голосов
/ 10 ноября 2011

Итак, это один из тех моментов, когда вы чувствуете себя самым отсталым разработчиком всех времен. В результате я выполнил несколько асинхронных вызовов одновременно и попытался сослаться на объект, который был возвращен одним из этих вызовов до того, как он был фактически создан. Чепуха на меня, я запутался с асинхронными потоками.

Большое спасибо Даниилу. Ваш вклад привел меня прямо к проблеме!

...