Java:更改一些标签暂停并将其更改回来不起作用

时间:2013-10-25 19:39:02

标签: java

今天有一个Java问题......

我用一些按钮和标签构建了一个带有框架的框架。当我点击按钮时,我想要更改3个Lables等待几秒钟并将其更改回来。我重申了它:

lKarte1.setText(test.kartendeck[0].iam()); //lKarte1 is the label and iam() returns a String
lKarte2.setText(test.kartendeck[0].iam()); 
到目前为止,这项工作相当不错。一些时刻,我改变了一些更多的标签     if(halt [0] .wertigkeit.getValue()> halt [1] .wertigkeit.getValue()){lPlayer1.setText(“PLayer1 Wins !!!!!”);}

这也是有效的。所以在这条线之后我想要休息大约2秒。

try{Thread.sleep(2000);} catch(InterruptedException e){}

两秒后,它应该显示“旧”标签。

            lPlayer1.setText("Player1");
        lPlayer2.setText("Player2");
        lKarte1.setText("");
        lKarte2.setText("");

现在我的问题。当我这样做没有Thread.sleep一切正常。 但是当我使用Thread.sleep()并且我点击按钮时,没有显示任何内容,只有2秒没有任何反应。我知道或者更好地看到在2秒结束时,标签眨眼所以他做了改变,,,但是为什么不改变bevor他应该去睡觉?????

2 个答案:

答案 0 :(得分:2)

从ActionListener调用的代码在Event Dispatch Thread(EDT)上执行。 Thread.sleep()导致EDT进入休眠状态,这意味着GUI无法自行重绘。

相反,您可以使用Swing Timer来安排更新JLabel上的文本。

请参阅Swing tutorial。您可以阅读ConcurrencyHow to Use Timers上的相关部分以获取更多信息。

答案 1 :(得分:1)

你正在通过在那里睡觉来填充主事件线程。在后台线程中进行睡眠,然后在完成睡眠后使用

更新主事件线程中的标签文本
SwingUtilities.invokeLater()