Sizi doğru anladıysam, kullanıcı kapat düğmesine tıklamasa bile uygulamayı kapatmak istersiniz. WindowEvents'i belki addWindowListener () veya enableEvents () ile ihtiyaçlarınıza daha uygun olanı kaydetmeniz gerekir.
Daha sonra olayı processWindowEvent () çağrısıyla çağırabilirsiniz. İşte bir JFrame oluşturacak, 5 saniye bekleyecek ve JFrame'i kullanıcı etkileşimi olmadan kapatacak örnek bir kod.
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();
}
}
Gördüğünüz gibi, processWindowEvent () yöntemi, uygulamayı kapatmadan önce gerekirse bazı temizleme kodu yapma fırsatınız olduğunda WindowClosed olayının tetiklenmesine neden olur.