2011-04-08 42 views
6

這是外部錯誤消息的最佳實踐問題。如何將錯誤消息外部化

我正在研究一個項目,我們在代碼,簡短描述和嚴重性方面存在錯誤。我想知道外部化這種描述的最佳方法是什麼。我想到的是讓它們在代碼中是不好的,將它們存儲在數據庫中,讓它們在屬性文件中,或者可以讓一個靜態類加載描述。我想我會選擇物業,但也許有更好的辦法。

由於

+2

您應該使用ResourceBundle ...請參閱@justkt答案。 – CoolBeans 2011-04-08 15:19:46

回答

8

使用ResourceBundle來存儲這些消息(和其他用戶界面消息,諸如按鈕和標籤文本,促進劑,快捷方式等)。假設您有一個名爲ErrorMessages的包,其中包含一個名爲error.NameOfErrorMessage的錯誤和一個變量框架中的JFrame,下面是一個簡短示例。

ResourceBundle errorMsg = ResourceBundle.getBundle("ErrorMessages"); 
String currError = errorMsg.getString("error.NameOfErrorMessage"); 
JOptionPane.showMessageDialog(frame, currError); 

欲瞭解更多信息,你可以在國際化教程中看到About the Resource Bundle Class

0

我想有很多方法可以正確地做到這一點。 我看到的最常用的方法是使用外部文件涉及您的實際代碼內部的錯誤代碼和描述類似

error.123="Error with data X" 
warning.1="You must use ..." 

要更改您的應用程序中的文字錯誤,你只需要改變這個文本文件。這是國際化的工作方式

error.123="Error con el dato X" 
warning.1="Deberías usar ..." 
3

我們遇到了類似的問題。你說得對,代碼中的信息是一個糟糕的選擇。我們發現一些因素影響了哪種替代方案更好。在我們的例子中,我們需要在客戶端使用Java處理相同的錯誤代碼,並在服務器端使用SQL和Perl代碼。我們發現有一箇中心定義是有用的,所以我們使用了一個數據庫。

如果您只需要在Java中處理錯誤代碼,那麼屬性文件或資源束可能是最靈活的,因爲它們允許本地化和/或國際化。我會遠離靜態類;雖然它比在線錯誤描述更好,但它仍然相對不靈活。

+0

使用數據庫解決方案,您仍然可以創建自己的ResourceBundle子類,該子類在db中查找其值,從而提供使用ResourceBundle的位置化和國際化優勢。 – justkt 2011-04-08 15:37:29

+0

@justkt - 你可以這樣做,但以這種方式繼承ResourceBundle是很多工作。另一種方法是從數據庫中生成一個屬性文件,然後將其作爲PropertyResourceBundle加載。 – 2011-04-08 15:43:41