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