2017-03-16 69 views
0

我跑一些Java二進制從慶典,如:顯示java.lang.NullPointerException並返回代碼

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,howewer返回碼爲0,但我需要一些非零退出代碼來理解bash應用程序失敗。

什麼是處理這種情況的正確方法?

更新:

這裏是「套」嘗試catch塊的exxample,當我在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

返回代碼取決於應用程序的功能,默認情況下是'return 0',我不知道是否可以更改那個。 – SomeJavaGuy

+0

請編輯您的問題幷包含該例外的堆棧跟蹤。特別是,主線程中是否發生異常是相關的;如果沒有,你需要通知主線程(或者哪個線程調用System.exit)失敗。 – VGR

回答

0

你可以在你的主要方法中添加一個try-catch塊,並使用

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); 
    } 
} 
+0

它可以與嵌套的try-catch塊一起工作嗎? – mrgloom

+0

是的,只要嵌套的catch塊在發生故障的情況下向外部引發異常。如果他們**處理異常並繼續程序,則外部catch塊無法設置返回碼。 – Harald

+0

這不會有所作爲。如果主線程拋出NullPointerException,Java將已經返回一個非零的退出碼。 – VGR

0

返回代碼是由退出方法設置系統:順便說一下,例如,如果你想在異常情況下返回-1,你可以這樣做:在你的主類中,你必須捕獲所有可拋出的(所以你將處理所有可能的情況)。這裏是一個例子

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

該代碼顯示你如何返回-1的情況下例外和0的情況下成功。

相關問題