2013-08-06 4 views
1

GWT의 버튼을 클릭하면 NullPointer 예외가 발생합니다. 문제를 디버그하고 디버그하는 방법을 제안 할 수 있습니까? 나는 코드의 스 니펫을 여기에 게시했다.Onclick의 NullPointer 예외

작성시 영화 티켓을 만드는 양식이 있으며, 사용자가 결정하지 않으면 취소됩니다. 취소시 첫 번째 양식으로 성공적으로로드되지만 부모 양식 버튼은 클릭시 널 포인터 예외를 발생시킵니다.

참고 :이 상위 단추는 createMovie 페이지를로드하지 않으면 정상적으로 작동합니다.

createMovie.class

FocusWidget.class에서
public void init(ClickListener listener) 
    { 

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

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

    initWidget(createMovie); 

    } 

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

이 당신이 정말로'addClickHandler'instead를 사용해야 addClickListener'가되지 않습니다'아마 당신의 문제의 원인이 아니라. – Marconius

답변

2

주위의 범위 즉, 우리에게 것들 내가 해결하기 위해 수행 한 문제를 일으키는 코드의 전체 블록을 줄 수 있다면

도움이 될 것 둘 다 형태의 버튼을 취소했다 parent & child) createMovie.class (child)에서 'cancel'을 호출하면 부모 폼이 제거되었습니다. 그래서 내가 자식 폼 (createMovie)에서 'cancel'을 누를 때 리스너는 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은 null 객체에서 무언가를 실행하려고한다는 것을 의미합니다. (글쎄, 정확하게는 아니지만 기본적으로 그것입니다.)

우선 스택 추적을 읽는 법을 배웁니다. 그것은 매우 중요한 기술입니다. 기본적으로, 당신이 당신의 파일을 찾을 때까지 스택을 내려 간다. 이 경우 FocusWidget : 102입니다. 102 행이 어떤 것인지는 모르므로 추측 할 것입니다.

오류가 해당 코드 조각에 있음을 암시하는 것처럼 보이고 if 문에서 아무것도 확인할 수 없으므로 if 문에서 아무 것도 null이 될 수 없으므로 필자의 추측은 인수 "listener"가 null이라는 것입니다 . 그래도 나는 잘 모르겠다. (당신이 라인 (102)

+0

코드 줄을 추가했습니다 & 나는 스택을 읽고 prob를 찾으려고합니다. 내가 동영상 형식을 만들지 않으면 작동하지. –

+0

아. ClickListener와 "this"라는 두 가지 요소가 있습니다. 전자가 null이 아닌 경우, 전자는 후자 여야합니다. 그래서 여하튼, "this"는 null입니다. –

+0

도움을 주셔서 감사 드리며 양식에 문제가 있습니다. –