在JButton监听器工作时更改JLabel文本

时间:2016-11-23 20:01:34

标签: java multithreading swing jbutton jlabel

我有一个JButton,我们称之为“按钮”,并为其添加了一个ActionListener:

button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
        call();
    }
});

它正确地添加到我的框架等。在那个JFrame我也有一个JLabel,我想在JButton方法工作时更改它的文本(因为它需要大约30秒才能完成)。我怎么做?我是否必须使用一些多线程的东西? 这是基本原则(JLabel称为输出):

public void call(){
    output.setText("test1");
    try { Thread.sleep(1000);
    } catch (InterruptedException e) {}
    output.setText("test2");
}

这将导致“输出”标签在一秒钟后变为“test2”。如何让它立即显示“test1”?

1 个答案:

答案 0 :(得分:2)

不要使用Thread.sleep()。这将阻止GUI重新绘制自己。

  

我是否必须使用一些多线程的东西?

对于长时间运行的任务,您需要启动单独的Thread,以便GUI可以保持响应。

在这种情况下,您可以使用SwingWorker

阅读Concurrency上的Swing教程中的部分,了解更多信息以及使用SwingWorker的示例。