2013-08-06 96 views
1

我在點擊GWT中的一個按鈕時面臨NullPointer異常,有人可能會建議我如何繼續並調試問題嗎?我已經在這裏發佈了代碼片段。Onclick中的NullPointer異常

我有一個表單,創建一個電影票,如果用戶決定不取消。在取消它成功加載回第一個表單,但父窗體按鈕在點擊時拋出空指針異常。

注意:如果我不加載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

範圍的事情我都做了修正,

我有兩種形式取消按鈕(父母&孩子),並且在createMovie.class(child)中調用'cancel'時,我刪除了父窗體。所以當我試圖在子窗體(createMovie)中按'取消'時,監聽器正在傳遞Null。

修復

  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,我正在閱讀堆棧並嘗試查找問題。它的作品,如果我不去創建電影形式。 –

+0

啊。那裏有兩個元素:clickListener和「this」。如果前者不是零,那一定是後者。所以不知何故,「這個」是空的。 – 2013-08-06 04:50:25

+0

感謝您的幫助,這是表格的問題。 –