除非我单击 window 标题,否则 JLabel 无法正常工作

JLabel isn't working properly unless I click window title

我有一个程序,我试图在其中显示一张图片,5 秒后它从 JLabel 中删除图片,然后显示第二张图片,但第二张图片不会自行显示,除非我单击 header 或程序创建的 window 顶部的栏。我希望在不与 window 交互的情况下自动显示图像。有帮助吗?

public void pictures(){
  try{
     BufferedImage myPicture = ImageIO.read(new File("round-1.jpg"));
     JLabel picLabel = new JLabel(new ImageIcon(myPicture));
     picLabel.setSize(800,600);
     add(picLabel);
     picLabel.setVisible(true);
     Timer timer = new Timer();
     timer.schedule(new TimerTask() {
          @Override
          public void run(){
             picLabel.setVisible(false);
             pictures2();
          }
       }, 5000);
     }
  catch(IOException e){
     e.printStackTrace();
  }
}

public void pictures2(){
  try{
     BufferedImage myPicture2 = ImageIO.read(new File("go.png"));
     JLabel picLabel2 = new JLabel(new ImageIcon(myPicture2));
     picLabel2.setSize(800,600);
     add(picLabel2);
     picLabel2.setVisible(true);
  }
  catch(IOException e){
     e.printStackTrace();
  }
}

可能是因为您的定时器任务的工作(运行方法)运行在一个单独的线程中,而不是在 Swing 事件处理线程中?

我怀疑您应该在计时器的 运行 方法中调用 SwingUtilities.invokeLater,以便在 Swing 事件处理线程中完成对标签的更改。