2009-09-25 82 views
1

为了国际化我的代码的时候,我用它位于被称为配置资源文件夹的属性文件名为MessagesBundle_en_UK.properties让我以下结构:java.util.MissingResourceException运行一个罐子

+---src 
     \---com 
      \---proj 
        \---messages 
           Messages.java 
+---config 
     \---languages 
        MessagesBundle_en_UK.properties 

Messages.java有:

currentLocale = new Locale("en", "UK"); 
    messages = ResourceBundle.getBundle("MessagesBundle", currentLocale); 

,我已经在类路径的开头添加的配置/语言,当我用命令行的javac/java的运行程序,它工作正常。


我的问题是,当我运行jar和我得到这个MissingResourceException错误,它不工作。

虽然清单不包括配置/语言:

Class-Path: 
     ./config/languages 
     ./libs/xxxx.jar 
     ./libs/... 
     ... 

我有点糊涂了......

感谢您的帮助 大卫

回答

3

你应该引用您的资源包的位置相对于根,好像它是一个包的成员:

messages = ResourceBundle.getBundle("config.lagnuages.MessagesBundle",currentLocale); 
0

我认为这里的问题是,您尝试将目录添加到清单Class-Path,但不要以/字符结尾。从Extension Mechanism documentation

的应用程序(或,更一般地,JAR文件)指定可选的包(和库),它经由清单属性Class-Path需要的相对URL。如果找不到作为安装在主机Java虚拟机*上的可选软件包,则此属性列出要搜索可选软件包(或其他库)实现的URL。这些相对URL可能包含应用程序或可选包所需的任何库或资源的JAR文件和目录。 假定不以'/'结尾的相对URL指的是JAR文件。例如,

Class-Path: servlet.jar infobus.jar acme/beans.jar images/ 

大多数人捆绑在自己的罐子他们的属性文件。例如:

+---jar_root 
     \---com 
      \---proj 
        \---messages 
           Messages.class 
           MessagesBundle_en_UK.properties 

此捆绑包的名称将为"com.proj.messages.MessageBundle"