有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

linux java。lang.NullPointerException和返回代码

我正在从bash运行一些java二进制文件,如:

跑过来。嘘

$JAVA_HOME/bin/java -Djava.library.path=path1/libs/opencv/lib -jar path2/bin/application.jar
echo "Exit code: "$?

但在应用程序内部,我得到了java.lang.NullPointerException,但是返回代码是0,但我需要一些非零的退出代码来从bash理解应用程序失败了

处理此类案件的正确方式是什么

更新:

下面是一个'nested'try-catch块的示例,当我在inner_package_class中抛出异常时,返回代码为0。那么,从内部包类获取异常的正确方法是什么呢。方法1()

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.");
    }
}

共 (2) 个答案

  1. # 1 楼答案

    您可以在主方法周围添加一个try-catch块,并使用

    System.exit(1)
    

    当你抓到一个被扔掉的

    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); 
      }
    }
    
  2. # 2 楼答案

    返回代码由系统的exit方法设置:顺便说一句,如果您想在异常情况下返回-1,您可以按如下操作:在主类中,您必须捕获所有可丢弃的内容(因此您将处理所有可能的情况)。这里有一个例子

    public static void main(String[] args) {
    try { YOUR CODE 
    } catch(throwable t){
    System.exit(-1);
    }
    System.exit(0);
    }  
    

    代码显示了在异常情况下如何返回-1,在成功情况下如何返回0