Java label.setVisible(true)不';在流程完成之前,不要做任何事情

Java label.setVisible(true)不';在流程完成之前,不要做任何事情,java,swing,swingworker,event-dispatch-thread,Java,Swing,Swingworker,Event Dispatch Thread,我有一个包含几个按钮的对话框。单击特定按钮时,它的ActionListener会初始化一个需要几秒钟才能完成的过程。在此期间,我想向用户提供一些反馈。采取一种简单的方法,我在对话框“Computing…”中有一个最初不可见的标签。代码段如下所示 button_OpenHoursReport.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { lbl

我有一个包含几个按钮的对话框。单击特定按钮时,它的ActionListener会初始化一个需要几秒钟才能完成的过程。在此期间,我想向用户提供一些反馈。采取一种简单的方法,我在对话框“Computing…”中有一个最初不可见的标签。代码段如下所示

button_OpenHoursReport.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        lbl_Computing.setVisible(true);
        new runAndRenderReport();
        RunAndRenderReport.main(null);
        lbl_Computing.setVisible(false);
    }
});
问题是,lbl_计算文本在RunandEnderReport完成之前不可见。显然,这对用户没有多大帮助。不知道从这里到哪里去。这与线程有关吗?如果是这样的话,我可以使用一些关于如何开始的指导。

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


请参阅。

一个比使用SwingWorker简单得多的技巧是在调用setVisible(true)后调用标签。你应该立即看到效果

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

但是,如果您希望您的GUI在报告运行时也能以其他方式响应,SwingWorker是一种不错的选择。

谢谢。我现在将采用paintinstally方法,因为我的GUI可以等待几秒钟以完成该过程。当我需要GUI响应时,我会研究SwitgWord。对于一个简短的确定性滞后,也考虑设置<代码> Waista光标< /C>。谢谢您的建议。现在,我将采取直接的方法。