我正在调用Java代码中包含在同一文件夹中的.class的主类。那个主要是无效的,我想通过检查它的退出状态来检查它是否成功:
...
String[] arguments = new String[]{"a", "b"};
AnotherClass.main(arguments);
...
关于如何成为AnotherClass.main(参数)的任何想法;不归还什么?
谢谢。
答案 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
}
}