gpt4 book ai didi

java - 单击按钮时 Swing 中的延迟例程不应停止应用程序

转载 作者:行者123 更新时间:2023-11-30 03:36:07 27 4
gpt4 key购买 nike

我正在尝试执行以下操作:单击按钮,按钮消失 2 秒,文本出现 2 秒,2 秒后可见性反转。到目前为止我已经做到了:

btnScan.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
txtScanning.setVisible(true);
btnScan.setVisible(false);
try {
Thread.sleep(2000); //1000 milliseconds is one second.
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
btnScan.setVisible(true);
}

});

结果是,只要我单击 btnScan,整个程序就会卡住 2 秒,然后再执行任何操作。如何按正确的顺序添加延迟?

最佳答案

您不应在调度事件的代码中调用 sleep 方法。所有与工作相关的 UI 均由 EDT(事件调度线程)处理,并且 sleep 方法将导致其卡住,因此您的 Swing 应用程序将卡住。

要克服这个问题,您应该使用计时器。运行计时器并使用 SwingUtilities.invokeLater 执行 UI 操作,以便由 EDT 处理。

import java.util.Timer;

// make it a member variable
Timer timer = new Timer();
........
public void actionPerformed(java.awt.event.ActionEvent evt) {

button.setVisible(false);
timer.schedule(new TimerTask() {
@Override
public void run() {
SwingUtilities.invokeLater(new Runnable() {

public void run() {
button.setVisible(true);
}
});

}
}, 2000);

}

关于java - 单击按钮时 Swing 中的延迟例程不应停止应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847760/

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