Java 如果存在';5分钟内没有用户输入?

Java 如果存在';5分钟内没有用户输入?,java,calculator,Java,Calculator,所以,我需要用java创建一个计算器,如果用户在5分钟内没有与程序交互,则在5分钟后自动关闭。我不知道怎么做。有人能帮忙吗?您需要一个运行的后台线程。该线程将有一个while循环,可以每隔30秒左右检查一次程序是否执行了5分钟以上。如果是,则执行系统退出(0)。等待执行 编辑:下面是实现。当用户处于活动状态时,可以调用active方法重置lastActiveTime 作为对John帖子的回应,当事件循环在等待用户的I/O时被阻塞时,可能需要一个线程 class ExitIfInactive ex

所以,我需要用java创建一个计算器,如果用户在5分钟内没有与程序交互,则在5分钟后自动关闭。我不知道怎么做。有人能帮忙吗?

您需要一个运行的后台
线程。该线程将有一个
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吗?也不要忘记在用户执行一些活动后重置计时器。