【发布时间】:2017-08-07 10:43:50
【问题描述】:
我正在从 bash 中运行一些 java 二进制文件,例如:
run_me.sh
$JAVA_HOME/bin/java -Djava.library.path=path1/libs/opencv/lib -jar path2/bin/application.jar
echo "Exit code: "$?
但是在应用程序内部我得到java.lang.NullPointerException,但是返回码是 0,但是我需要一些非零退出码才能从 bash 中了解应用程序失败。
处理此类情况的正确方法是什么?
更新:
这是“嵌套”try catch 块的示例,当我在inner_package_class 中抛出异常时,返回码为 0。那么从 inner_package_class.method1() 获取异常的正确方法是什么?
public static void main(String[] args) {
try {
inner_package_class.method1();
System.out.printf("After inner method!\n");
} catch (Throwable t) {
System.exit(1);
}
}
public class inner_package_class {
public static void method1() {
System.out.printf("From inner method!\n");
try
{
throw new Exception("Some exception 2.");
} catch (Throwable t) {
}
}
}
更新 1: 这按预期工作(返回非零退出代码)。
public class inner_package_class {
public static void method1() throws Exception {
System.out.printf("From inner method!\n");
throw new Exception("Some exception 2.");
}
}
【问题讨论】:
-
返回码取决于应用程序的功能,这里默认为
return 0,我不知道你是否可以更改它。 -
请编辑您的问题并包含该异常的堆栈跟踪。尤其是异常是否发生在主线程是相关的;如果没有,您将需要通知主线程(或调用 System.exit 的任何线程)失败。