2013-08-06 7 views
1

Je suis confronté à l'exception NullPointer en cliquant sur un bouton dans GWT, Quelqu'un pourrait me suggérer comment aller de l'avant et déboguer le problème? J'ai posté l'extrait du code ici.Exception NullPointer dans Onclick

J'ai un formulaire qui crée un ticket de cinéma sur créer, annuler si l'utilisateur décide de ne pas. Lors de l'annulation, il se charge avec succès sur le premier formulaire, mais les boutons de formulaire parent lancent une exception de pointeur null lors du clic.

Remarque: Ces boutons parents fonctionnent correctement si je ne charge pas la page createMovie.

createMovie.class

public void init(ClickListener listener) 
    { 

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

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

    initWidget(createMovie); 

    } 

Dans 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; 
    } 
    } 

Dans ClickListenerCollection.class

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

Erreurs:

[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

C'est probablement pas la source de vos problèmes, mais 'addClickListener' est dépréciée, vous devriez vraiment utiliser' addClickHandler'instead. – Marconius

Répondre

2

choses que je l'ai fait pour corriger,

je devais annuler le bouton dans les deux formes (parent & enfant) et lors de l'appel de 'cancel' dans createMovie.class (child) je supprimais le formulaire parent. Donc quand j'ai essayé d'appuyer sur 'cancel' sous forme enfant (createMovie), l'écouteur passait 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

Une exception NullPointerException signifie que vous essayez d'exécuter quelque chose sur un objet nul. (Eh bien, pas exactement, mais c'est fondamentalement ça.)

Tout d'abord, apprenez comment lire une trace de pile. C'est une compétence très importante. Fondamentalement, descendez la pile jusqu'à ce que vous trouviez un fichier qui vous appartient. Dans ce cas, c'est FocusWidget: 102. Puisque je ne sais pas quelle ligne 102 est, je devinerai juste. Puisque vous semblez impliquer que l'erreur est dans cet extrait de code, et que tout élément de l'instruction if ne peut pas être nul puisque vous le recherchez, je suppose que l'argument "listener" est null . Je ne suis pas sûr, cependant. Il serait utile si vous pouviez nous donner tout le bloc de code qui est à l'origine de la question, à savoir la portée autour de la ligne 102.

+0

Ajout de la ligne de code 102 & je lis la pile et essaye de trouver le prob. Cela fonctionne si je ne vais pas créer un formulaire de film. –

+0

Ah. Eh bien, il y a deux éléments là: clickListener et "this". Si le premier n'est pas nul, il doit être le dernier. Donc, d'une manière ou d'une autre, "ceci" est nul. –

+0

merci pour votre aide et c'était un problème avec le formulaire. –