2010-05-05 25 views
2

我有一個Java程序一次處理一個文件。這個Java程序是從一個包裝腳本調用的,該腳本記錄了來自Java程序的返回代碼。有兩種類型的錯誤。預期的錯誤和意外錯誤。在這兩種情況下,我只需要記錄它們。我的包裝知道約3種不同的狀態。 0-OK,1-PROCESSING_FAILED,2-錯誤。Java應用程序返回碼

這是一個有效的方法嗎?

這裏是我的方法:

enum ReturnCodes {OK,PROCESSING_FAILED,ERROR}; 

    public static void main(String[] args) 
    { 
     ... 
      proc.processMyFile(); 
     ... 
     System.exit(ReturnCodes.OK.ordinal()); 
    } 
    catch (Throwable t) 
    { 
     ... 
     System.exit(ReturnCodes.ERROR.ordinal()); 
    } 


private void processMyFile() 
{ 
    try 
    { 
     ... 
    }catch(ExpectedException e) 
    { 
     ... 
     System.exit(ReturnCodes.PROCESSING_FAILED.ordinal()); 
    } 
} 

回答

4

的約定是有

  • 零成功
  • 正數的警告
  • 負數錯誤

其背後的歷史是在某些環境中的錯誤代碼需要成爲8位值。按照慣例,對於嚴重的錯誤,高位被設置(這有效地使得-127-> -1對於錯誤和1對> 127對於警告)

當然,ANSI-C99僅定義了兩個宏,即EXIT_SUCCESS,是0和EXIT_FAILURE這是在規範中未定義的其他數字。

+0

我從來沒有聽說過。是Windows慣例還是什麼? – 2010-05-05 22:58:19

+0

@Stephen - 我用一些更多的信息更新了我的答案。 – 2010-05-05 23:48:24

+0

「在某些環境中」...請更具體。我一直在各種風格的UNIX/Linux上開發和使用軟件已有20多年了,我從來沒有聽說過一個約定,即積極的返回碼只是警告。請引用一個參考。 – 2010-05-06 00:10:33

1

是的,沒有錯吧。 個人我不會打擾一個枚舉它,幾個常量就足夠了。

0

這看起來很好。成功代碼爲0尤其重要,因爲這是約定,腳本環境將專門檢查這一點,並假定非零值是錯誤的。

0

看起來不錯。你可以把OK語句放在finally塊中。我喜歡使用固定常量集的枚舉。