我在我的应用程序中使用 java swing。下面是我的代码片段。但是我知道 Thread.sleep() 不应该与 swing 一起使用。我读了一些帖子,说要使用 javax.swing.timer 中的 Timer 但对于下面的代码我不知道如何实现它。
public void mouseClicked(MouseEvent e) {
try{
demo.main("Welcome");
Thread.sleep(900);
demo.main("Argument to main");
Thread.sleep(900);
demo.main("Argument to main");
// after this I call a method say `xyz` which also uses Thread.sleep()
// and this `xyz` method uses variables that are updated in `demo.main()`
}catch(Exception e){
e.printStackTrace();
}
如何实现与 sleep 相同的行为?
编辑:
demo.main()
不会更新 GUI,但xyz()
会根据情况更新 GUIdemo.main()
中更新的变量
- 我想首先在单击鼠标时调用
demo.main()
,一分钟后我想在一分钟后再次调用它。完成此操作后,我想调用另一个方法xyz()
,该方法也使用thread.sleep()
并使用demo.main() 中更新的变量
最佳答案
我将使用 ScheduledExecutorService
和一个有序的操作列表。使用 enum
对此很有帮助。然后,这个enum
可以实现一个简单的功能接口(interface)
。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
enum ClickAction {
Action1(900) {
@Override
void execute() {
message("Welcome");
}
},
Action2(900) {
@Override
void execute() {
message("Another message");
}
};
private final int delayAfter;
private ClickAction(int delayAfter) {
this.delayAfter = delayAfter;
}
abstract void execute();
}
private static void message(String msg) {
System.out.println("msg=" + msg);
}
public void mouseClicked(MouseEvent e) {
int delay = 0;
for (ClickAction action : ClickAction.values()) {
// Schedule it.
executor.schedule(() -> {
action.execute();
}, delay, TimeUnit.MILLISECONDS);
// Add up all of the delays.
delay += action.delayAfter;
}
}
关于java - 如何通过 GUI 使用 sleep(或类似 sleep 的东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36573986/