label.setVisible(true)在进程完成后才会执行任何操作

Pau*_*aul 2 java swing swingworker event-dispatch-thread

我有一个包含几个按钮的对话框.单击某个特定按钮时,它的ActionListener会启动一个需要几秒钟才能完成的过程.在此期间,我想向用户提供一些反馈.采取一种简单的方法,我在"计算..."对话框中有一个标签,该标签最初是不可见的.代码段看起来像这样

button_OpenHoursReport.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        lbl_Computing.setVisible(true);
        new runAndRenderReport();
        RunAndRenderReport.main(null);
        lbl_Computing.setVisible(false);
    }
});
Run Code Online (Sandbox Code Playgroud)

问题是,在RunAndRenderReport完成之前,lbl_Computing文本不可见.显然,这对用户没什么帮助.不知道从哪里开始.这与线程有关吗?如果是这样,我可以使用一些指导如何开始.

Eng*_*uad 5

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

请参阅SwingWorker的工作原理.