Java 如何在WindowClosing事件期间更新JFrame对象?

Java 如何在WindowClosing事件期间更新JFrame对象?,java,swing,jframe,Java,Swing,Jframe,我有几个关机步骤需要在WindowClosing事件期间执行,然后才能处理。一切都在正确执行,但我想添加在关闭JFrame中的现有JLabel中提供关闭状态消息的功能。是否可以在窗口关闭事件期间更新JLabel文本?当然可以。在开始与组件交互之前,请确保组件未被释放 SwingUtilities.invokeLater(new Runnable() { public void run() { // update label here } }); 但是

我有几个关机步骤需要在WindowClosing事件期间执行,然后才能处理。一切都在正确执行,但我想添加在关闭JFrame中的现有JLabel中提供关闭状态消息的功能。是否可以在窗口关闭事件期间更新JLabel文本?

当然可以。在开始与组件交互之前,请确保组件未被释放

SwingUtilities.invokeLater(new Runnable() {
     public void run() {
            // update label here
     }
});
但是我想添加在关闭JFrame中的现有JLabel中提供关闭状态消息的功能

侦听器中的代码在事件分派线程上执行,因此GUI无法重新绘制自身,直到所有侦听器代码都执行完毕,此时GUI将关闭


立即绘制(…)将允许组件绕过RepaitManager并立即绘制自身。

我使用以下代码在后台执行关闭步骤,然后关闭JFrame

frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {      
        SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
            @Override
            public Void doInBackground() {

                // shutdown steps go here and can update the JLabel text

                frame.dispose();
                return null;
            }
        };
        worker.execute();
    }
});
frame.addWindowListener(新的WindowAdapter(){
@凌驾
公共无效窗口关闭(窗口事件e){
SwingWorker worker=新SwingWorker(){
@凌驾
公共无效doInBackground(){
//关闭步骤转到此处,可以更新JLabel文本
frame.dispose();
返回null;
}
};
worker.execute();
}
});

JFrame在WindowClosing事件期间被冻结或挂起,因此任何组件更新都不会显示。更新了我以前的评论。有关如何影响
JFrame的关闭行为的描述,请参阅。我看不到该答案在WindowClosing事件中更新JFrame组件的地址。您的解释是有道理的,但我尝试使用paintinstally()时没有任何运气。帧在关闭事件中仍不更新。
frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {      
        SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
            @Override
            public Void doInBackground() {

                // shutdown steps go here and can update the JLabel text

                frame.dispose();
                return null;
            }
        };
        worker.execute();
    }
});