2013-08-06 2 views
1

Я столкнулся с исключением NullPointer при нажатии на кнопку в GWT, может кто-нибудь предложить мне, как идти дальше и отлаживать проблему? Я разместил здесь фрагмент кода.Исключение NullPointer в Onclick

У меня есть форма, которая создает билет на кино для создания, отмена, если пользователь решит не делать этого. При отмене он загружает обратно в первую форму успешно, но кнопки родительской формы бросают исключение null-указателя при щелчке.

Примечание: Эти родительские кнопки работали нормально, если я не загружаю createMovie-страницу.

createMovie.class

public void init(ClickListener listener) 
    { 

    // code ... 
    // ........ 

    cancel.addClickListener(listener); 
    createMovie.add(header); 
    createMovie.add(table); 
    createMovie.setHeight("663px"); 

    initWidget(createMovie); 

    } 

В FocusWidget.class

public void addClickListener(ClickListener listener) { 
    if (clickListeners == null) { 
     clickListeners = new ClickListenerCollection(); 
     sinkEvents(Event.ONCLICK); 
    } 
    clickListeners.add(listener); 
    } 

// code 

@Override 
    public void onBrowserEvent(Event event) { 
    switch (DOM.eventGetType(event)) { 
     case Event.ONCLICK: 
     if (clickListeners != null) { 
      clickListeners.fireClick(this); ------->>> LINE 102 
     } 
     break; 

     case Event.ONBLUR: 
     case Event.ONFOCUS: 
     if (focusListeners != null) { 
      focusListeners.fireFocusEvent(this, event); 
     } 
     break; 

     case Event.ONKEYDOWN: 
     case Event.ONKEYUP: 
     case Event.ONKEYPRESS: 
     if (keyboardListeners != null) { 
      keyboardListeners.fireKeyboardEvent(this, event); 
     } 
     break; 
    } 
    } 

В ClickListenerCollection.class

public void fireClick(Widget sender) { 
    for (ClickListener listener : this) { 
     listener.onClick(sender); 
    } 
    } 

Ошибки:

[ERROR] Uncaught exception escaped 
java.lang.NullPointerException: null 
    at com.google.gwt.user.client.ui.ClickListenerCollection.fireClick(ClickListenerCollection.java:34) 
    at com.google.gwt.user.client.ui.FocusWidget.onBrowserEvent(FocusWidget.java:102) 
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1308) 
    at com.google.gwt.user.client.DOM.dispatchEventAndCatch(DOM.java:1287) 
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1255) 
    at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
+2

Это, вероятно, не является источником ваших неприятностей, но 'addClickListener' осуждается, вы действительно должны использовать' addClickHandler'instead. – Marconius

ответ

2

вещи, которые я сделал, чтобы исправить,

я была кнопка отмены в обеих формах (родительский & ребенок), а при вызове «cancel» в createMovie.class (child) я удалял родительскую форму. Поэтому, когда я попытался нажать «отменить» в дочерней форме (createMovie), слушатель проходил Null.

Fix

  if (childFormLoaded) 
      { 
       if (panelsControl.containsPanel(createMovie.class.getName())) 
        panelsControl.removePanel(createMovie.class.getName()); 
      } 
      else 
      { 
       if (panelsControl.containsPanel(ParentClass.class.getName())) 
        panelsControl.removePanel(ParentClass.class.getName()); 
      } 
3

NullPointerException означает, что вы пытаетесь запустить что-то на нулевом объекте. (Ну, не совсем, но это в основном это.)

Прежде всего, научитесь читать трассировку стека. Это очень важный навык. В основном, сходите в стек, пока не найдете файл, который принадлежит вам. В этом случае это FocusWidget: 102. Поскольку я не знаю, какая строка 102, я просто догадываюсь.

Поскольку вы, кажется, подразумеваете, что ошибка находится в этом фрагменте кода, и что-либо в инструкции if не может быть нулевым, поскольку вы проверяете его, я предполагаю, что каким-то образом аргумент «слушатель» равен нулю , Хотя я не уверен. Было бы полезно, если бы вы могли бы дать нам весь блок кода, который вызывает проблему, то есть объем вокруг линии 102.

+0

Добавлен код 102 и я читаю стек и пытаюсь найти проблему. Он работает, если я не перехожу к createMovie форме. –

+0

Ах. Ну, есть два элемента: clickListener и «this». Если первое не является нулевым, оно должно быть последним. Итак, так или иначе, «это» имеет значение null. –

+0

спасибо за помощь, и это была проблема с формой. –

Смежные вопросы