我有一個代碼,當用戶按下一個按鈕時,一條消息應該顯示在文本區域,並且在2〜3秒之後,它應該消失。 Thread.sleep(毫秒)應該做到這一點,但它似乎並沒有工作(是的,我已經在try/catch和一切)。 這裏是我的聽衆:在程序中暫停(睡眠) - 似乎沒有正常工作?
private class moveListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
CardLayout cl = (CardLayout)(cards.getLayout());
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 3; j++)
{
if(e.getSource() == move[i][j])
{
turn++;
if(turn == 4)
turn = 0;
text.setText(""+SPRITES[i]+" has used " + move[i][j].getText());
try {
Thread.sleep(3000);
} catch (InterruptedException ex) { }
text.setText("");
cl.show(cards, MAIN);
}
}
}
}
當我跑這我能感覺到整個程序凍結(可能是由於sleep()方法),但它跳過text.setText(theMessage),並徑直到文本。的setText( 「」); 換句話說,它應該去哪裏點擊> Display> rest> erase;它確實點擊>休息>擦除。我已經嘗試了其他方法:這是做經典的(int i = 0;我< 9999999; i ++)的東西像20個小時,但是做了與Thread.sleep()方法相同的事情。
有什麼辦法解決這個問題?我已經讀了一些關於它與線程使用UI不好,但不知道這意味着什麼....任何幫助表示讚賞。
請不要在睡眠事件調度線程中睡眠 – Doorknob
「*當我運行這個時,我可以感覺到整個程序凍結(可能是由於sleep()方法)*」 - 不大可能。這是肯定的**。不要使用睡眠,它會阻止EDT。改爲使用'javax.swing.Timer'。 – Maroun
嘗試將'text.setText(「」);'移動到try塊中。 – christopher