【问题标题】:java.util.MissingResourceException when running a jar运行 jar 时出现 java.util.MissingResourceException
【发布时间】:2010-12-01 09:19:40
【问题描述】:

为了使我的代码国际化,我使用了一个名为 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/...
      ...

我有点糊涂了……

感谢您的帮助 大卫

【问题讨论】:

    标签: java resources jar classpath


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我认为这里的问题是您正在尝试将目录添加到清单 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 中。例如:

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-21
        • 2019-10-19
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-05
        相关资源
        最近更新 更多