2

我有一个包含几个按钮的对话框。单击特定按钮时,它的 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 文本不会变得可见。显然,这对用户没有多大帮助。不知道从这里去哪里。这与线程有关吗?如果是这样,我可以使用一些关于如何开始的指导。

4

2 回答 2

5

actionPerformed()在 GUI 线程 ( EDT ) 上执行,因此请避免对其执行密集操作。而是使用SwingWorker

请参阅SwingWorker 的工作原理

于 2013-02-28T19:10:06.477 回答
1

一个比使用 SwingWorker 更容易的技巧是在调用 setVisible(true) 之后在标签上调用paintImmediately 。您应该立即看到效果。

lbl_Computing.paintImmediately(0, 0, lbl_Computing.getWidth(), lbl_Computing.getHeight());

但是,如果您希望 GUI 在报告运行时也以其他方式响应,则 SwingWorker 是您的最佳选择。

于 2013-02-28T19:21:36.403 回答