2010-06-28 162 views
2

我正在研究大量使用資源包和i18n的J2SE應用程序(請考慮kiosk風格的應用程序)。這不僅包括翻譯,還包括格式和其他國際性問題。我們有定製的邏輯來使資源加載均勻化,但它非常簡單。我遇到的問題是MissingResourceException。即使我忽略了應用程序中的自定義邏輯,並直接調用ResourceBundle類來加載此特定包,但Java無法爲特定區域加載它。這裏是根異常與堆棧跟蹤:Java缺少資源

Caused by: java.util.MissingResourceException: Can't find bundle for base name version1/FormatResource, locale en_GB 
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:836) 
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:726) 
at java.util.ResourceBundle.getBundle(ResourceBundle.java:576) 

資源包是放在Eclipse的一個類文件夾是在我的類路徑的頂部目錄「VERSION1」。該文件夾包含其他資源包,它們使用相同的資源包加載邏輯加載正常,以及許多使用系統類加載器加載時也能正常加載的XML配置。資源包的相關文件是:

FormatResource_cs_CZ.properties 
FormatResource_en_GB.properties 
FormatResource_fr_BE.properties 
FormatResource_fr_FR.properties 
FormatResource_hu_HU.properties 
FormatResource_nl_BE.properties 
FormatResource_nl_NL.properties 
FormatResource_pl_PL.properties 
FormatResource_sk_SK.properties 

當我的應用程序在波蘭語言環境中啓動時,一切正常。如果我以波蘭語區域的用戶身份登錄,則一切正常。如果我以英國用戶身份登錄,應用程序會嘗試加載所有en_GB捆綁包(翻譯,格式化程序等),並在此捆綁包上失敗。它找不到FormatResource_en_GB.properties,這顯然是在類路徑中:上述文件列表是從命令行復制並粘貼的。

我覺得有趣的最後一個問題是,如果我在版本1目錄中定義FormatResource_en_US.properties,那麼即使是FormatResource_pl_PL.properties文件也無法加載,應用程序甚至無法啓動。

任何人有任何想法?

回答

0

我會嘗試測試文件&操作系統問題,如權限。

重新命名您的FormatResource_en_GB.properties,這樣就不復存在,並將其中一個工作FormatResource文件複製到其位置。

0

我覺得有趣的是,當你把美國放在列表的首位時,你會提到它裝載的那個,而不是任何其他的裝置(類似於波蘭人在頂部時)。你在查找下一個資源包時是否切換區域設置?或者當程序第一次啓動時,它是否保持默認設置?

另一個想法是類加載器....每當我遇到屬性文件沒有正確定位(即使它們是我期望的位置),我最終不得不看看類加載器如何加載東西。通常它與我所懷疑的不同(比如其他地方的重複文件,或者多個相互衝突的類加載器)。

只是兩個想法嘗試。