gpt4 book ai didi

java - 在程序中暂停( sleep ) - 似乎无法正常运行?

转载 作者:行者123 更新时间:2023-12-01 04:40:36 38 4
gpt4 key购买 nike

我有一个代码,当用户按下按钮时,一条消息应该显示在文本区域上,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() 方式做了同样的事情。

有办法解决这个问题吗?我读过一些关于在 Thread 中使用 UI 很糟糕的文章,但不确定这意味着什么......感谢任何帮助。

最佳答案

           text.setText(""+SPRITES[i]+" has used " + move[i][j].getText() );

Thread t = new Thread(){
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException ex) { }
SwingUtilities.invokeLater( new Runnable() {
text.setText("");
cl.show(cards, MAIN);
} );
}
};
t.start();

通常的模式是:

有“GUI 线程”,或者 EDT,或者你想怎么调用它。

GUI 线程对 GUI 执行某些操作。

然后它启动一个等待一段时间的新线程。

在 GUI 线程之间可以渲染 GUI 的其他部分,对鼠标使用react,等等。

然后新线程醒来,并通过向 GUI 线程传递一个 Runnable 对象来告诉 GUI 线程做什么(有多种方法可以做到这一点,我这里使用常用的一种)。

关于java - 在程序中暂停( sleep ) - 似乎无法正常运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16639173/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com