java - 当 JButton 监听器工作时更改 JLabel 文本

标签 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”?

最佳答案

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

Do I have to use some multi-thread-thingy?

是的。

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

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

阅读 Swing 教程中关于 Concurrency 的部分了解更多信息和使用 SwingWorker 的示例。

关于java - 当 JButton 监听器工作时更改 JLabel 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40773207/

相关文章:

java - 如何从另一个类访问数组

java - 根据 spring 错误值显示 HTML 元素

java - 改变 <c :set jSTL tag 的值

Java - 如何将 ArrayList 保存到文件中并打开它?

java - 如何使用 GridBagLayout 使 JLabel 1 列宽,然后使 JTextField 2 列宽(总宽度 3 列)

java - 如何在Jpanel上点击鼠标绘制一个实心椭圆

java - 使用 leftPanel、topPanel 和 bottomPanel 设置 JFrame

java - 在填充的数据库中使用 @GenerateValue(strategy=GenerationType.IDENTITY) 会导致 PK 约束错误

C#后台 worker ,winform。 "Cross-thread operation not valid:"

c# - 关于多线程、锁和多核处理器的多部分问题(multi^3)