【发布时间】:2015-07-19 03:14:15
【问题描述】:
我正在尝试运行以下 Java 代码,当我通过 Windows 命令行上的 CTRL + C 杀死它时,它应该会自动重启:
import java.net.*;
import java.io.*;
public class LineRunner extends Thread {
public static void main(String[] args) throws InterruptedException, IOException{
try {
for (int i = 0; i<10000000; i++) {
Thread.sleep(200);
System.out.print("hithe");
}
}
catch( InterruptedException ioex) {
String[] command = {"C://Program Files//Java//jdk1.7.0_02//bin//java.exe", "LineRunner"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process exec = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(exec.getInputStream()));
String text = null;
while ((text = br.readLine()) != null) {
System.out.println(text);
}
System.out.println("Process exited with " + exec.waitFor());
}
}
}
但是当我从命令行(通过 CTRL + C )杀死时,它不会像我希望的那样重新启动程序。
感谢任何提示,谢谢
【问题讨论】:
-
有什么例外吗?如果是这样,请发布堆栈跟踪。此外,请正确格式化您的源代码。
-
你知道Ctrl-C会导致抛出中断异常吗?我认为它会关闭 JVM(但可能是错误的)。另外,这段代码背后的基本原理是什么?它看起来不像是一个安全的程序设计,如果它有效,可能会非常烦人。
-
@HovercraftFullOfEels - 我相信你可能是对的。当我输入
CTRL + C它只是停止输出并进入下一个命令行 -
听起来你想捕获 SIGINT。这个answer 可能会给你一些想法。
-
同样,尽管这种程序设计有可能让用户非常恼火。
标签: java processbuilder