我的程序存在问题。我有一个按钮处理程序,我想让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");
}
}
答案 0 :(得分:5)
我认为我的代码会起作用,但它会延迟,但是两个JLabel 一旦方法结束就消失。
这是一个典型的Swing并发问题,因为你从EDT调用Thread.sleep()
,这是一个单一的特殊线程,其中发生Swing事件处理,同时也应该进行组件创建/更新。 / p>
如果您阻止此线程,您的GUI将无法重新绘制自己并将冻结,直到线程准备好处理Swing相关的内容。
为了实现您的目标,我建议您在一段时间后使用Swing timer使这些标签消失。
有关此事的更多信息,请查看: