java - 为什么线程不能正常 hibernate ?

标签 java multithreading

我正在尝试制作一个简单的 JButton,单击它会导致简单的 JLabel 将其文本更改为“第二个文本”,之后我希望当前线程 hibernate 几秒钟,最后 JLabel 更改其文本再次,这次是“第三文本”。我想我已经在这里完成了,但它并没有按照我想要的方式工作。下面提供的代码使 JButton 卡住指定的时间范围,就像按住一样,然后标签更改为第三种状态。换句话说,“秒文本”不会出现。

请告诉我该怎么做。

谢谢。

package testPackage;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Demo {

    public static void main(String[] args) throws InterruptedException {
        JFrame frame = new JFrame();
        JButton button = new JButton("Click me!");
        final JLabel label = new JLabel("first text");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        JPanel panel = new JPanel();
        panel.add(button);
        panel.add(label);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                label.setText("second text");
                try {
                    Thread.currentThread();
                    Thread.sleep(4000);
                } catch (InterruptedException exc) {
                    System.out.println("Erorrrrr");
                }

            }
        });

        frame.add(panel);
        frame.setVisible(true);
    }

}

最佳答案

当您考虑 Java 的内部结构时,要看到结果,文本属性的更改并不是唯一要做的事情。该控件还必须重新绘制(可能无效)。

通过调用 sleep,您实际上阻止了 java GUI 内部工作人员重绘您更改的控件。它只能在 sleep 完成后发生。

关于java - 为什么线程不能正常 hibernate ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225411/

相关文章:

c++ - C++ 中的多线程 SDL 错误

java - 在Java中从字符串中提取这个int的最佳方法是什么?

c - Typedef 结构指针正确指向 typedef 结构 (C)

java - LWJGL (JAVA) 中的 OpenGL 多线程

java - 对LeetCode上的 “Print in Order”问题感到困惑

java - 线程同步行为

java - quarkus/microprofile 中的组配置

java - 找出给定的 1000 位数字的十三位连续数字的最高乘积

java - 如何知道下游订阅者何时调用 onNext()?

java - Java 中的线程局部变量与局部变量