1

GWT でボタンをクリックすると NullPointer 例外が発生します。先に進んで問題をデバッグする方法を教えてもらえますか? コードのスニペットをここに投稿しました。

作成時に映画のチケットを作成するフォームがあり、ユーザーがそうしない場合はキャンセルします。キャンセルすると、最初のフォームに正常にロードされますが、親フォームのボタンをクリックすると 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)
4

2 に答える 2

2

私が修正するために行ったこと、

両方のフォーム (親と子) にキャンセル ボタンがあり、 createMovie.class ( child ) で「キャンセル」を呼び出すと、親フォームが削除されました。そのため、子フォーム ( 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() );
            }
于 2013-08-06T20:00:06.530 に答える