我正在执行一个简单的命令,其中用户提供选项(args)并且我做了一个逻辑来获取Java程序中的args,其中我使用wait()特定时间,以便命令将花费最少的时间到执行。之后我将一些数据保存在文件中。
在这段时间内,如果用户想要结束流程,应该能够通过提供类似"退出"等输入来顺利停止流程。在命令提示符下。
请帮忙。
答案 0 :(得分:1)
中断命令行程序的标准方法是在应用程序中添加Ctrl-C处理程序:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// cleanup logic here
}
});
有关详细信息,请参阅此question。
既然你坚持了。这是在后台线程中执行命令时的实现。我希望这个例子的复杂性会阻止你实现它:
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Shell {
private static final int NUM_PARALLEL_COMMANDS = 5;
private static final int SLEEP_DURATION = 1000;
public static void main(String[] args) throws InterruptedException {
ExecutorService executor =
Executors.newFixedThreadPool(NUM_PARALLEL_COMMANDS);
try (Scanner scanner = new Scanner(System.in)) {
String command = null;
int counter = 0;
do {
command = scanner.nextLine();
switch (command) {
case "DoStuff":
executor.submit(NewDoStuffCommand(++counter));
break;
}
} while (!command.equals("exit"));
}
executor.shutdownNow();
executor.awaitTermination(1, TimeUnit.SECONDS);
}
private static Runnable NewDoStuffCommand(final int counter) {
return new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
System.out.println(counter + ": Doing time consuming things...");
Thread.sleep(SLEEP_DURATION);
}
System.out.println(counter + ": Finished.");
} catch (InterruptedException e) {
System.out.println(counter + ": Command interrupted :(");
// do cleanup
Thread.currentThread().interrupt();
}
}
};
}
}