我有一个包含几个按钮的对话框。单击某个特定按钮时,它的ActionListener会启动一个需要几秒钟才能完成的过程。在此期间,我想向用户提供一些反馈。采取一种简单的方法,我在“计算...”对话框中有一个标签,该标签最初是不可见的。代码段看起来像这样
button_OpenHoursReport.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
lbl_Computing.setVisible(true);
new runAndRenderReport();
RunAndRenderReport.main(null);
lbl_Computing.setVisible(false);
}
});
问题是,在RunAndRenderReport完成之前,lbl_Computing文本不可见。显然,这对用户没什么帮助。不知道从哪里开始。这与线程有关吗?如果是这样,我可以就如何开始使用一些指导。
答案 0 :(得分:5)
actionPerformed()
在GUI线程(EDT)上执行,因此请避免对其执行密集操作。而是使用SwingWorker。
答案 1 :(得分:1)
比使用SwingWorker容易得多的技巧是在调用setVisible(true)后调用标签上的paintImmediately。你应该立即看到效果。
lbl_Computing.paintImmediately(0, 0, lbl_Computing.getWidth(), lbl_Computing.getHeight());
但是,如果您希望GUI在报告运行时以其他方式响应,那么SwingWorker就是您的选择。