如何让JLabel在一段时间后消失?

1 java swing multithreading jlabel

我的程序有问题.我有一个按钮处理程序,我想让JLabel消失,然后等待一秒钟,然后导致第二个JLabel消失.我认为我的代码会起作用,它会延迟,但是一旦方法完成,两个JLabel都会消失.它们同时消失,这不是我想要的.我的代码如下.谢谢您的帮助!

private void jButton14ActionPerformed(java.awt.event.ActionEvent evt) {                                          

    String numInputStr = inputBox.getText();
    int numInput = Integer.parseInt(numInputStr);

    inputBox.setText("");

    if (numInput == 1) {
        coin1.setVisible(false);
        c1Visible = false;
    } else if (numInput == 2) {
        coin1.setVisible(false);
        c1Visible = false;
        coin2.setVisible(false);
        c2Visible = false;

    } else if (numInput == 3) {
        coin1.setVisible(false);
        c1Visible = false;
        coin2.setVisible(false);
        c2Visible = false;
        coin3.setVisible(false);
        c3Visible = false;
    } else {
        System.err.println("Invalid Input, try again");

    }

    jButton14.setVisible(false);

    try {
        Thread.sleep(1000);
    } catch (Exception E) {

    }

    if ((c1Visible == false) && (c2Visible == true) && (c3Visible == true)) {
        coin2.setVisible(false);
        coin3.setVisible(false);
        coin4.setVisible(false);
    } else if ((c2Visible == false) && (c3Visible == true) && (c1Visible == false)) {
        coin3.setVisible(false);
        coin4.setVisible(false);

    } else if ((c3Visible == false) && (c4Visible == true)) {
        coin4.setVisible(false);
    } else {
        System.out.println("Something went wrong, please try again");
    }


}
Run Code Online (Sandbox Code Playgroud)

dic*_*c19 5

我认为我的代码会起作用,它会延迟,但是一旦方法完成,两个JLabel都会消失.

这是一个经典的Swing并发问题,因为您Thread.sleep()EDT调用,这是一个单一且特殊的线程,其中发生Swing事件处理以及组件创建/更新也应该发生.

如果你阻止这个线程,你的GUI将无法重新绘制自己,并且会被冻结,直到线程准备好处理Swing相关的东西.

为了达到你的目标,我建议你使用Swing计时器让这些标签在给定的一段时间后消失.

有关此问题的更多信息,请查看: