Domanda

Perché se creo un JFrame allora il programma viene eseguito ancora fino a quando (cioè) Chiudo con il piccolo pulsante "uscita" della finestra?

ho cercato questa risposta e ho fallito. L'unica cosa che ho immaginato è che quando faccio new JFrame() è come un new speciale, che mantiene un riferimento dell'oggetto nella EDT, così sarà sempre essere referenziato (anche se era un anonimo "nuovo") e non sarà eliminato dal garbage collector. Poi, non appena il più vicino è attivato l'evento delle finestre, l'oggetto viene dereferenziato e distrutto.

È stato utile?

Soluzione

Prova, yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE).

Il motivo per cui continua a funzionare è che il cosiddetto filo spedizione evento continua a funzionare in background, e finché si dispone di thread non demone in esecuzione, l'applicazione non terminerà. Dalla documentazione di filo:

  

Quando una Java Virtual Machine si avvia, di solito c'è un singolo thread non demone (che in genere chiama il metodo di nome principale di una classe designato). La Java Virtual Machine continua ad eseguire le discussioni finché non si verifica una delle seguenti:

     
      
  • Il metodo di uscita del classe Runtime è stato chiamato e il responsabile della sicurezza ha consentito l'operazione di uscita di prendere posto.
  •   
  • Tutte le discussioni che non sono thread demoni sono morti, sia per il ritorno dalla chiamata al metodo run o un'eccezione che si propaga al di là del metodo run.
  •   

Non è il creazione del JFrame che prende il via il "gui-thread". Questo filo viene avviato quando il telaio diventa visibile e possibilmente deve eventi spedizione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top