【问题标题】:Why can't I re-execute a Java program from within an Exception block? [duplicate]为什么我不能从 Exception 块中重新执行 Java 程序? [复制]
【发布时间】: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


【解决方案1】:

你需要使用addShutdownhook来监听程序退出,你可以在那里重启你的程序。

【讨论】:

    【解决方案2】:

    Ctrl-C 将退出 JVM,正如 cmets 中已经讨论的那样。

    【讨论】:

    • 创建了一个社区 wiki,这样我(或 plkmthr)就不会因为之前在 cmets 中讨论的内容而获得积分。尤其是自从 plkmthr 回答 之后 这一切都在 cmets 中得到了很好的证实。
    • 直到今天我才看到 cmets 并检查了答案的反对票。在堆栈溢出应用程序上很难跟踪 cmets 和答案。我从不反对任何人。当你无缘无故被否决时,这是没有意义的。如果您因为认为您已经建立了世界已经知道的东西而对我投了反对票,那么您对我也没有任何意义。
    猜你喜欢
    • 2023-03-03
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多