我从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中理解应用程序失败。
处理此类案件的正确方法是什么?
更新
这是一个嵌套'的例子。尝试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.");
}
}
答案 0 :(得分:0)
您可以在main方法周围添加try-catch-block并使用
System.exit(1)
当你抓住一个Throwable
public static void main(String[] args) {
try {
... // your original code
} catch (Throwable t) {
// log the exception
t.printStacktrace(); // or use your logging framework
System.exit(1);
}
}
答案 1 :(得分:0)
返回代码由System的exit方法设置:顺便说一句,例如,如果你想在异常情况下返回-1,你可以按照以下步骤操作:在你的Main类中你必须捕获所有throwable(所以你将处理所有可能的情况)。这是一个例子
public static void main(String[] args) {
try { YOUR CODE
} catch(throwable t){
System.exit(-1);
}
System.exit(0);
}
代码显示如何在异常的情况下返回-1,在成功的情况下返回0。