gpt4 book ai didi

java - 如何通过 GUI 使用 sleep(或类似 sleep 的东西)

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

我在我的应用程序中使用 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/

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