Nếu tôi hiểu đúng về bạn, bạn muốn đóng ứng dụng ngay cả khi người dùng không nhấp vào nút đóng. Bạn sẽ cần đăng ký WindowEvents có thể bằng addWindowListener () hoặc enableEvents (), tùy theo nhu cầu của bạn.
Sau đó, bạn có thể gọi sự kiện bằng lời gọi processWindowEvent (). Đây là mã mẫu sẽ tạo JFrame, đợi 5 giây và đóng JFrame mà không cần người dùng tương tác.
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);
//in case the user closes the window
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
//enables Window Events on this Component
this.addWindowListener(this);
//start a timer
Thread t = new Timer();
t.start();
}
public void windowOpened(WindowEvent e){}
public void windowClosing(WindowEvent e){}
//the event that we are interested in
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){}
//a simple timer
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");
//close the frame
ClosingFrame.this.processWindowEvent(
new WindowEvent(
ClosingFrame.this, WindowEvent.WINDOW_CLOSED));
}
}
//instantiate the Frame
public static void main(String args[]){
new ClosingFrame();
}
}
Như bạn có thể thấy, phương thức processWindowEvent () khiến sự kiện WindowClosed được kích hoạt khi bạn có cơ hội thực hiện một số mã dọn dẹp nếu bạn yêu cầu trước khi đóng ứng dụng.