这可能听起来像之前被问过,但它与常规有点不同。我不想要典型的(在用户运行程序之后,我想让它问“你想再去一次吗?”)。我想开始一个过程(通过键入我已经完成的某个字符串)并让它运行无限长的时间,直到用户停止它。没有办法知道它将运行多久。这个程序恰好是一个计时器。所以我需要它来计算它运行了多长时间,能够在任何给定时刻被用户停止,并打印出它运行了多长时间。
截至目前,我没有使用任何UI / GUI。保持尽可能简单。
答案 0 :(得分:3)
设置关闭挂钩(在JVM暂停时运行的代码):
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
// print stuff here
}
}));
让用户在命令行键入 ctrl c 以暂停执行 - 当JVM关闭时,您的钩子将运行以打印您喜欢的内容。
以上是残酷而简单的,但是如果你不想终止整个JVM,那么你就会进入“服务器事件”领域来驱动行为,这可能会采取多种形式来引发行动: / p>
这是一个使用关闭钩子的最小实现(在命令行上启动并按 ctrl c 结束并运行计算代码):
public static void main(String[] args) throws Exception {
final long start = System.currentTimeMillis();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
double hours = (System.currentTimeMillis() - start) / 3600000d;
System.out.println("Please enter the hourly rate");
double hourlyRate = new Scanner(System.in).nextDouble();
System.out.format("Program ran for %01.3f hours and cost $%02.2f", hours, hourlyRate * hours);
}
}));
Thread.sleep(Long.MAX_VALUE); // Sleep "forever"
}
答案 1 :(得分:0)
你可以用守护进程启动一个Thread,然后在System.input中读取一行,然后中断该线程。 java.util.Timer
也是可能的。