java - 我尝试显示图像 3 秒,然后切换到 java gui,但它不起作用

标签 java image swing event-dispatch-thread

我尝试制作一个程序,显示图像 3 秒,然后切换它,但不是显示第一个图像,而是等待,然后显示第二个图像,而是等待显示第一个图像,然后显示第二个图像,谢谢您的帮助

        JLabel image = new JLabel("");
        image.setBounds(100, 20, 125, 200);
        contentPane.add(image);
        image.addMouseListener(new MouseAdapter() {
              public void mouseClicked(MouseEvent me) {

                  image.setIcon(one);

                  try {

                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                  image.setIcon(two);

              }

            });

最佳答案

尝试这样的事情:

image.setIcon(one);
javax.swing.Timer timer = new Timer(3000, new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
    image.setIcon(two);
    timer.stop();
  }
});

确保使用 javax.swing.Timer 而不是 java.util.Timer,因为您正在更新 Swing UI 组件。 Swing Timer 在事件调度线程 (EDT) 上执行其回调。

话虽如此,请考虑使用 SwingWorker对于长时间运行的任务(即,如果示例中的图像文件很大)。 docs建议仅使用上述方法执行小/短任务。

关于java - 我尝试显示图像 3 秒,然后切换到 java gui,但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53840564/

相关文章:

c++ - knnMatchImpl 中的断言失败 (queryDescriptors.type() == trainDescCollection[0].type()),

java - 如何将当前时间更改为用户时间

java - AbstractListModel 与 jdk 1.6.0_45 不通用

Java实时固定时间间隔

html - 为什么图片不放在html页面的最左上角?

java - 如何创建符号链接(symbolic link)

c++ - 更改 cv::remap 的 map 以包括调整大小

java - 如何使 JFileChooser 在断开网络驱动器时正常运行?

java - 在 JNLP Java Web Start 中继续浏览器 session ,同时维护 jar 缓存

java - 为每个 map task 生成一个输入文件