หากฉันเข้าใจคุณถูกต้องคุณต้องการปิดแอปพลิเคชันแม้ว่าผู้ใช้จะไม่ได้คลิกที่ปุ่มปิดก็ตาม คุณจะต้องลงทะเบียน WindowEvents ด้วย addWindowListener () หรือ enableEvents () แล้วแต่ความต้องการของคุณจะดีกว่า
จากนั้นคุณสามารถเรียกใช้เหตุการณ์ด้วยการเรียกใช้ processWindowEvent () นี่คือโค้ดตัวอย่างที่จะสร้าง JFrame รอ 5 วินาทีแล้วปิด JFrame โดยไม่ต้องโต้ตอบกับผู้ใช้
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();
}
}
อย่างที่คุณเห็นเมธอด processWindowEvent () ทำให้เหตุการณ์ WindowClosed เริ่มทำงานโดยที่คุณมีโอกาสในการทำความสะอาดโค้ดบางอย่างหากคุณต้องการก่อนที่จะปิดแอปพลิเคชัน