Java 如果存在';5分钟内没有用户输入?
所以,我需要用java创建一个计算器,如果用户在5分钟内没有与程序交互,则在5分钟后自动关闭。我不知道怎么做。有人能帮忙吗?您需要一个运行的后台Java 如果存在';5分钟内没有用户输入?,java,calculator,Java,Calculator,所以,我需要用java创建一个计算器,如果用户在5分钟内没有与程序交互,则在5分钟后自动关闭。我不知道怎么做。有人能帮忙吗?您需要一个运行的后台线程。该线程将有一个while循环,可以每隔30秒左右检查一次程序是否执行了5分钟以上。如果是,则执行系统退出(0)。等待执行 编辑:下面是实现。当用户处于活动状态时,可以调用active方法重置lastActiveTime 作为对John帖子的回应,当事件循环在等待用户的I/O时被阻塞时,可能需要一个线程 class ExitIfInactive ex
线程。该线程将有一个while
循环,可以每隔30秒左右检查一次程序是否执行了5分钟以上。如果是,则执行系统退出(0)
。等待执行
编辑:下面是实现。当用户处于活动状态时,可以调用active
方法重置lastActiveTime
作为对John帖子的回应,当事件循环在等待用户的I/O时被阻塞时,可能需要一个线程
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();
}
}
如果线程是一个问题,您应该在渲染方法中获得某种时间差。如果没有,则需要使用交互时间更新成员:
long msTimeLastUsed = System.currentTimeMillis();
然后在事件循环中检查
if (System.currentTimeMillis() - msTimeLastUsed > 1000 * 60 * 5)
System.exit(0);
我建议使用线程只是作为最后的手段,比如当你需要把你的CPU推到底的时候。是你的计算器GUI吗?也不要忘记在用户执行一些活动后重置计时器。