我有一个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”?
答案 0 :(得分:2)
不要使用Thread.sleep()。这将阻止GUI重新绘制自己。
我是否必须使用一些多线程的东西?
是
对于长时间运行的任务,您需要启动单独的Thread
,以便GUI可以保持响应。
在这种情况下,您可以使用SwingWorker
。
阅读Concurrency上的Swing教程中的部分,了解更多信息以及使用SwingWorker
的示例。