Java - Swing JLabel更新速度太快了?

jad*_*jan 1 java swing multithreading jlabel

在类的方法中,我更新相同的标签两次.第一次,它显示要等待的用户消息,但第二次向用户显示已完成的消息.类似于以下内容:

MyClass{

    myMethod(){

        jLabel.setText("Please wait...");

        //does calculation

        jLabel.setText("Completed successfully!");

        }
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,我看到的只是"已成功完成"消息.JLabel更新速度太快了吗?我该如何控制它?我尝试使用以下但没有运气:(

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                 jLabel.setText("Please wait...");
            }
        });
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 6

如果计算是在事件派发线程中完成的,那么它会阻塞线程并阻止它进行所有重新绘制.您必须在另一个线程中执行计算,并让此线程在结束时更改标签文本(在事件调度线程中,使用SwingUtilities.invokeLater或使用SwingWorker机制).如果计算速度非常快,那么它是不值得的,因为第二个文本在第一个文本之后会很快出现,你甚至都不会注意到第一个文本.

看看为这种用例设计的SwingWorker.它的javadoc包含一个有用的例子.