Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207

    [JAVA] problema con metodo dispose

    Allora ragazzi vi spiego il mio problema :

    -Ho una classe che rappresenta il menu principale di un'applicazione e che chiamerò con A
    -Ho una seconda classe che rappresenta un pannello con vari componenti al suo interno, questo panello lo andrò ad inserire nella classe successiva.diciamo che questa classe la chiamo B.
    -Ho una terza classe formata da una jTabbed e ogni jTabbed contiene il pannello precedente.Questa classe la chiamo con C. Quindi in pratica ogni jtabbed di C contiene la classe B.

    Fatta una panoramica delle mie classi ora vi espongo il mio problema.Praticamente tramite A (attraverso uno specifico bottone) faccio aprire C. C contiene un bottone "Torna al menu principale" (questo bottone naturalmente fa parte del pannello B, il quale come detto è inserito in C), tramite questo bottone quindi io dovrei tornare ad A e far chiudere C. Ho implementato il listener, però riesco solo a far aprire A, nel momento in cui il listener chiama la dispose() su C mi genera un'eccezzione e C nn si chiude.Come mai ??

    vi posto il codice dell'eccezzione e il listener.

    Codice exception

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at
    interfaccia.Pannello_inserimento_modifica$1.action Performed(Pannello_inserimento_modifica.java:418)
    at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    Codice listener

    torna.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
    try
    {
    insdati.dispose();
    }
    catch (NullPointerException ex) {}
    finally
    {

    Maschera_Iniziale mas = new Maschera_Iniziale();
    JFrame f = mas.getJFrame();
    f.show();
    insdati.dispose();

    }
    }
    });

    -torna è il bottone per tornare al menu principale
    -insdati è un oggetto di tipo C
    -Maschera_Iniziale sarebbe la classe che ho chiamato A qui

    questo listener è richiamato naturalmente all'interno del pannello che qui ho denominato B, perchè il bottone appartiene al pannello.

    grazie come sempre per il vostro aiuto..

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    ragazzi per favore..mi date una mano

  3. #3
    per qualche motivo la variabile insdati non è inizializzata ed è impostata a null...
    posta la parte in cui la valorizzi...

  4. #4
    Io ho sempre usato hide()
    Non so se vuoi provare...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    allora in effetti l'inizializzazione di insdati nn l'avevo fatta..ora l'ho fatta..inserendola nel listener..così..

    codice:
    ...
    
    private Frame_inserimento_dati insdati;
    
    ...
    
    
    torna.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent evt) {
    				try
    				{
    						JFrame frame = new JFrame();
    						insdati = new Frame_inserimento_dati(frame,true);
    						insdati.dispose();
    				}
    				catch (NullPointerException ex) {}
    				finally
    				{
    					
    					Maschera_Iniziale mas = new Maschera_Iniziale();
    					JFrame f = mas.getJFrame();
    					f.show();
    					insdati.dispose() ;
    					
    				}
    			}
    			});

    Frame_inserimento_dati è la classe che qui nel post ho indicato con C, il costruttore di Frame_inserimento_dati vuole un oggetto frame e una variabile booleana (l'ho fatto io così per motivi miei ).

    ora nn mi da più le eccezzioni..però la finestra insdati pur essendoci il dispose nn scompare alla pressione del tasto "torna al menu principale".


    Dici hide() al posto di dispose() ? ma io dispose() l'ho usato più volte per far scomparire le finestre che volevo..e ha sempre funzionato..

  6. #6
    Allora, a parte che nel finally insdati continua a non essere inizializata...., non puoi dire che
    insdati = nuova Frame ma devi dire che insdati è la frame che vuoi chiudere! devi passargliela in qualche modo....

    cosi come è adesso tu leghi ad insdati una new frame che poi chiudi subito.....

  7. #7
    Stavo scrivendo la stessa cosa

    Io, per non far vedere più il frame sono dovuto risalire in questo modo

    codice:
    getParent().getParent().getParent().getParent().hide();
    Penso sia una cosa mostruosa... ma funza!!

    Fammi sapere

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    e come gliela faccio a passare in qualche modo :master: ?? cioè come faccio a dirgli che la frame che voglio chiudere è "Frame_inserimento_dati" ??

    eragorn ma quel metodo mostruoso su cosa dovrei chiamarlo ??

  9. #9
    Ma "Frame_inserimento_dati" è il frame dove si trova il pulsante per chiudere??

    Se è quello fai una cosa del genere, fino a risalire alla classe frame per poi richiamare il metodo hide()....

  10. #10
    allora spero di non fare confusione con le classi A,B,C etc...

    Quando crei la classe B nel costruttore di B passagli il riferimento all'oggetto classe C....

    poi sempre ne costruttore fai insdati = oggetto che hai passato al costruttore...

    public class B{
    .
    .
    .

    public B(C myFrame){
    insdati = myFrame;
    }

    .
    .
    .
    }

    e poi quando vuoi puoi chiamare insdati.dispose();

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.