Foro de elhacker.net

Programación => Java => Mensaje iniciado por: 1mpuls0 en 13 Octubre 2008, 09:57 am



Título: Excepcion al cancelar una ventana
Publicado por: 1mpuls0 en 13 Octubre 2008, 09:57 am
Hola amigos del foto, me gustaria que me ayudaran con este metodo como puedo arreglarlo, estoy trabajando en un programa en el cual tengo que crear N botones(representan conjuntos) los cuales no puede repetir su nombre asi que utilizo listas pero si el nombre del elemento ya existe aun asi me retorna el nombre del conjunto pero para esto mando llamar el mismo metodo( nombreConjunto(); )  y quiero que me digan si hay una mejor opcion; mi segundo problema es que al cerrar la ventana donde pido el nombre del conjunto por ejemplo si doy click en cancelar o cerrar ventana me tira las excepciones que vienen despues del codigo, les agradecere mucho su ayuda!!

saludos

PD. No quise escribir todo el codigo por que es mucho, pero si es necesario para una mejor apreciacion(aunque no lo creo) me avisan...



public String nombreConjunto()
      {
         
         try
               {
                  nombreBoton = JOptionPane.showInputDialog(null,"Escribe el nombre del conjunto","Nombre del conjunto",1);
                  nodo encontrado;
                  encontrado =  listina.buscarlis(nombreBoton);
             if(encontrado != null)
             {
                JOptionPane.showMessageDialog(null,"El nombre del conjunto ya existe");
                nombreConjunto();
             }
             else
             {
                listina.insertarprimero(nombreBoton);
             }
               }
         catch(NullPointerException exception)
         {}
               
               while(nombreBoton.equals("")||nombreBoton.charAt(0)==' ')
               {   
                  try
             {
               nombreBoton = JOptionPane.showInputDialog(null,"Escribe el nombre del conjunto","Nombre del conjunto",1);
             }         
            catch(NullPointerException exxx)
            {}
            
               }
         

         
         return nombreBoton;
      }



ClickC1
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at 1mpuls0.productoCartesiano.nombreConjunto(productoCartesiano.java:529
)
        at 1mpuls0.productoCartesiano.agregarBoton(productoCartesiano.java:465)
        at 1mpuls0.productoCartesiano.botConjuntosActionPerformed(productoCartes
iano.java:373)
        at 1mpuls0.productoCartesiano.access$000(productoCartesiano.java:12)
        at 1mpuls0.productoCartesiano$1.actionPerformed(productoCartesiano.java:
118)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:19
95)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
a:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242
)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322
)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Press any key to continue...


Título: Re: Excepcion al cancelar una ventana
Publicado por: juancho77 en 14 Octubre 2008, 06:28 am
Citar
java.lang.NullPointerException

El "return" de ese metodo devuelve nombreBoton. Si haces click en cancelar, se producen las excepciones que son correctamente atrapadas en el codigo porque se intenta operar con un String nulo. Debes incluir codigo para atrapar la excepcion que se produciria al final si intentas retornar nombreBoton como nulo.
Por ejemplo:

     
Código
  1. try {
  2.         return nombreBoton;
  3.       }
  4.       catch (Exception e) { return null }
  5.  
  6.  

Eso te soluciona el error en el metodo que posteaste.
Saludos


Título: Re: Excepcion al cancelar una ventana
Publicado por: 1mpuls0 en 14 Octubre 2008, 08:38 am
     
Código
  1. try {
  2.         return nombreBoton;
  3.       }
  4.       catch (Exception e) { return null }
  5.  
  6.  

Eso te soluciona el error en el metodo que posteaste.
Saludos

Hola si me funciono para el momento en que se cierra la ventana pero aun asi cuando cancelo el JOptionPane me retorna null y crea un boton sin nombre!!, pero para mi trabajo creo que no hay problema! aunque si me hubiera gustado que no regresara el valor en caso de que se cancelara o cerra la ventana


saludos


Título: Re: Excepcion al cancelar una ventana
Publicado por: juancho77 en 15 Octubre 2008, 19:09 pm
Y claro, porque llamas al Dialog desde una instruccion setText() del boton. Entonces, cuando retorna null crea un String null para el texto del boton. Para solucionar eso tendrias que poner la llamada al dialog en otra parte. Por ejemplo:
Código
  1. String textoBoton = JOptionPane.showMessageDialog();
  2. if (! textoBoton.equals(null))  //si textoBoton no es igual a null
  3.        // establecerel texto del boton
  4. else  //si textoBoton es null
  5.       // mostras un mensaje de error o pones un nombre generico.
   


Título: Re: Excepcion al cancelar una ventana
Publicado por: 1mpuls0 en 17 Octubre 2008, 09:01 am
A oks si que me ha servido, como no pensarlo antes xD, buen gracias...   ;D
gracias juancho77

Citar:
String textoBoton = JOptionPane.showMessageDialog();if (! textoBoton.equals(null))  //si textoBoton no es igual a null        // establecerel texto del botonelse  //si textoBoton es null       // mostras un mensaje de error o pones un nombre generico.