Jeśli dobrze cię rozumiem, chcesz zamknąć aplikację, nawet jeśli użytkownik nie kliknął przycisku zamykania. Będziesz musiał zarejestrować WindowEvents, być może za pomocą addWindowListener () lub enableEvents (), w zależności od tego, co bardziej odpowiada Twoim potrzebom.
Następnie możesz wywołać zdarzenie za pomocą wywołania processWindowEvent (). Oto przykładowy kod, który utworzy JFrame, odczekaj 5 sekund i zamknie JFrame bez interakcji użytkownika.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ClosingFrame extends JFrame implements WindowListener{
public ClosingFrame(){
super("A Frame");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
this.addWindowListener(this);
Thread t = new Timer();
t.start();
}
public void windowOpened(WindowEvent e){}
public void windowClosing(WindowEvent e){}
public void windowClosed(WindowEvent e){
System.exit(0);
}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
class Timer extends Thread{
int time = 10;
public void run(){
while(time-- > 0){
System.out.println("Still Waiting:" + time);
try{
sleep(500);
}catch(InterruptedException e){}
}
System.out.println("About to close");
ClosingFrame.this.processWindowEvent(
new WindowEvent(
ClosingFrame.this, WindowEvent.WINDOW_CLOSED));
}
}
public static void main(String args[]){
new ClosingFrame();
}
}
Jak widać, metoda processWindowEvent () powoduje wywołanie zdarzenia WindowClosed, w którym istnieje możliwość wyczyszczenia kodu przed zamknięciem aplikacji.