Ho provato un addWindowListener
e attuare il windowClosing
, funziona, quando si preme il pulsante di chiusura, ma quando uso Cmd+Q
per chiudere, il windowClosing
non viene chiamato, come posso risolverlo? Devo rilevare Cmd+Q
su mac, Alt + F4
su Windows tramite il listener di chiavi? È un ascoltatore generale per chiudere la finestra, qualunque cosa tramite il pulsante di chiusura o la tastiera, o l'evento Ctrl+Alt+Delete
o Cmd+Option+Esc
per mettere a fuoco il kill? Grazie.Come rilevare che JFrame è chiuso?
risposta
Sembra che sia necessario aggiungere un po 'di KeyListeners
e una fabbrica per rilevare quello che si desidera per un particolare sistema operativo.
non sono sicuro quale sia la situazione su Mac, ma su Windows si ottiene il callback windowClosing() dal pulsante di chiusura; Alt-F4
; e se chiudi l'app tramite il task manager. Non si ottiene il callback se si utilizza Task Manager per terminare il processo, ma non me lo aspetterei comunque.
Hai ricordato di chiamare setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
sull'istanza di JFrame, no?
È possibile utilizzare questa libreria osx: com.apple.eawt.ApplicationListener
handleQuit(ApplicationEvent event)
probabilmente fare il trucco.
informazioni dalla documentazione:
Chiamato quando l'applicazione viene inviato l'evento Quit. Questo evento viene generato quando l'utente seleziona Esci dal menu dell'applicazione, quando l'utente digita Comando-Q o quando il controllo utente fa clic sull'icona della tua applicazione nel Dock e sceglie Esci. Puoi accettare o rifiutare la richiesta di uscire.
Ovviamente questa soluzione non funzionerà su Windows. Per quanto ne so, non esiste tuttavia una soluzione universale, quindi questo è probabilmente il modo migliore per andare.
c'è un altro metodo windowClosed() provare il metodo di prova prevalente. spero che funzionerà per voi.
Come hai detto windowClosing viene chiamato quando si fa clic sul pulsante (x). Sono anche su un Mac e il modo in cui ottengo il CMD + Q per inviare un segnale al applicazione utilizza Runtime.addShutDownHook
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// code to run when CMD+Q is pressed
}
}
http://stackoverflow.com/questions/2061194/swing-on-osx-how -to-trap-command-q – dacwe
http://www.leepoint.net/notes-java/GUI/containers/10windows/12frameclose.html –
@TedWong Hai trovato una soluzione al tuo problema? Si prega di inviare la propria risposta, se lo hai fatto. – Igor