检查main的退出状态

时间:2014-04-01 15:04:12

标签: java

我正在调用Java代码中包含在同一文件夹中的.class的主类。那个主要是无效的,我想通过检查它的退出状态来检查它是否成功:

    ...
    String[] arguments = new String[]{"a", "b"};
    AnotherClass.main(arguments);
    ...

关于如何成为AnotherClass.main(参数)的任何想法;不归还什么?

谢谢。

2 个答案:

答案 0 :(得分:4)

更好的想法 - 而不是尝试调用main方法,而是在你的另一个类中创建一个名为testMain()的方法,它与main做同样的事情,除了它返回退出代码而不是退出。


调用System.exit(),main方法将关闭整个程序。您想在另一个线程中运行另一个main并找到该线程的退出代码。

构建另一个程序(将jar命名为AnotherClass.jar),将jar添加到路径中并尝试:

int exitCode;
try {
    Process process = Runtime.getRuntime().exec("java AnotherClass.jar",new String[]{"arg1","arg2"});
    exitCode = process.waitFor();
    System.out.println(exitCode);
} catch (IOException e) {
    System.out.println("IO Error: " + e);
} catch (InterruptedException e) {
    System.out.println("Inturrupted: " + e);
}

编辑:以下内容根本不起作用; System.exit()会杀死所有线程。

此代码将在新线程中运行另一个main方法,当它退出时,它不会损害您当前的程序。

Thread anotherProgram = new Thread(new Runnable() {
    @Override
    public void run() {
        AnotherClass.main(new String[]{"foo","bar"});
    }
});
anotherProgram.start();

答案 1 :(得分:1)

如果您指的是System.exit(int status)的退出代码参数,则无法访问它,因为当main方法的某些部分(或随后执行的代码)调用它时,您的应用程序将被退出,因此,没有任何东西可以运行来获取代码。

检查应用程序退出代码的唯一方法是使用操作系统,例如unix中的$?环境变量告诉您​​要在该会话中终止的最后一个应用程序的退出代码。

编辑:以下是使用ProcessBuilder执行此操作的示例:

Process p = new ProcessBuilder(System.getProperty("java.home")+"/bin/java", "fully.qualified.package.to.AnotherClass").start();
Integer exitCode = null;
while (exitCode == null) {
  try {
    exitCode = p.waitFor();
  } catch (InterruptedException e) {
    // handle e
  }
}