我有一个代码,当用户按下按钮时,应该在文本区域显示一条消息,并且在 2~3 秒后,它应该消失。
Thread.sleep(milliseconds) 应该这样做,但它似乎不起作用(是的,我在 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) 并直接进入 text.setText(""); 换句话说,它应该去哪里点击>显示>休息>擦除;它确实单击>休息>擦除。
我尝试了其他方法:它正在执行经典的 for(int i = 0; i < 9999999; i++) 类似 20 次的事情,但这与 Thread.sleep() 方式相同。
有任何解决这个问题的方法吗?我读过一些关于将 UI 与 Thread 一起使用很糟糕的文章,但不确定这意味着什么……感谢任何帮助。