前文再续,书接上一回,上一篇文章介绍了我如何用java实现了一个调用外部程序的命令行工具,本文则介绍如何实现按下ctrl + c退出这个命令行。
代码其实并不复杂。只是调试的时候被坑。原因是代码没什么问题,但在idea调试的时候,不起作用;发布出来运行,才有效果。搞来搞去,浪费了不少时间。
1、主程序
就是一个十分原始的spring boot项目,入口:
@SpringBootApplication
public class WodProcessorApplication{
public static void main(String[] args) {
Thread t = new Thread(new Runner());//Runner
t.setName("wodASC调用程序");
t.run();
try {
t.join();
} catch (InterruptedException ex) {
System.out.println("程序中断。。。");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
2、运行线程
import java.util.Scanner;
public class Runner implements Runnable {
private boolean bExit = false;
public Runner() {
Runtime.getRuntime().addShutdownHook(new ExitHandler());
}
public void run() {
System.out.println();
System.out.println("============== wodASC批量转换工具(Ctrl + C 退出)==============");
System.out.println();
Scanner sc = new Scanner(System.in);
while (!bExit) {
System.out.println("请输入待处理的文件夹完整路径:");
String path = sc.nextLine();
//InvokeHandler是自定义的,调用外部程序的工具,详见参考文章一
InvokeHandler handler = new InvokeHandler(path);
bExit = handler.start();
}
System.out.println();
System.out.println("程序已结束,按回车退出");
sc.nextLine();
}
private class ExitHandler extends Thread {
public ExitHandler() {
super("退出程序");
}
@Override
public void run() {
System.out.println("正在退出...");
bExit = true;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40