运行jar时java.util.MissingResourceException

时间:2009-09-25 10:49:58

标签: java resources jar classpath

为了使我的代码国际化,我使用名为MessagesBundle_en_UK.properties的属性文件,该文件位于名为config的资源文件夹中,以便我具有以下结构:

+---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/...
      ...

我有点困惑......

感谢您的帮助 大卫

2 个答案:

答案 0 :(得分:3)

您应该引用ResourceBundle相对于根的位置,就好像它是包的成员一样:

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

答案 1 :(得分:0)

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

  

应用程序(或更一般地说,JAR文件)通过清单属性Class-Path指定所需的可选包(和库)的相对URL。如果无法在主机Java虚拟机*上安装可选包,则此属性会列出用于搜索可选包(或其他库)实现的URL。这些相对URL可以包括应用程序或可选包所需的任何库或资源的JAR文件和目录。 假设不以'/'结尾的相对网址引用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"