所以,如果用户在java中没有与程序交互5分钟,我需要在5分钟后创建一个自动关闭的计算器。我不知道该怎么做。有人可以帮忙吗?
答案 0 :(得分:2)
如果线程有问题,你应该在渲染方法中获得某种时间差异。如果不是,您需要在交互时更新成员:
long msTimeLastUsed = System.currentTimeMillis();
然后在你的事件循环中检查
if (System.currentTimeMillis() - msTimeLastUsed > 1000 * 60 * 5)
System.exit(0);
我建议只使用线程作为最后的手段,比如当你需要推动你的所有CPU时。
答案 1 :(得分:0)
您需要运行后台Thread
。该线程将有一个while
循环,可以每隔30秒左右检查一次,看看程序执行的时间是否超过5分钟。如果是,请执行System.exit(0)
。等待实施。
编辑:这是实施。当用户处于活动状态时,您可以调用active
方法重置lastActiveTime
。
在回复John的帖子时,当事件循环被阻止等待来自用户的I / O时,可能需要Thread
。
class ExitIfInactive extends Thread {
private long lastActiveTime;
private long timeout;
public ExitIfInactive(long timeout) {
this.timeout = timeout;
this.active();
}
// call inside event loop to reset
public void active() {
this.lastActiveTime = System.currentTimeMillis();
}
public void run() {
while(true) {
if (System.currentTimeMillis() - lastActiveTime > this.timeout) {
System.exit(0);
}
try {
Thread.sleep(1000); // granularity to check
} catch(InterruptedException e) {
System.exit(-1);
}
}
}
}
class Main {
public static void main(String[] args) {
ExitIfInactive exitIfInactive = new ExitIfInactive(300_000L); // 5 minutes
exitIfInactive.start();
}
}