【问题标题】:ResourceBundle file not found, properties file not in jar找不到 ResourceBundle 文件,属性文件不在 jar 中
【发布时间】:2012-07-24 22:36:02
【问题描述】:

关于资源包错误,我已经阅读了有关同一主题的其他问题,但我没有得到任何更明智的信息。尝试了不同的东西,没有帮助。提供一点背景知识:我开发了一个小应用程序(JDK6),它可以自动进行一些平面文件的解析和编辑。该应用程序首先从属性文件中读取一些数据。

重要: 我希望能够更改属性文件。我不想把它放在jar文件中。

但是,即使使用我尝试创建的小示例应用程序,基于另一个问题/答案 [此处][1]:

package restestapp;

import java.util.Locale;
import java.util.ResourceBundle;


public class ResourceBundleTester
{
    public static void main(String[] args)
    {
        Locale locale = Locale.getDefault();
        String basename ="myresource";
        ResourceBundle resourceBundle = ResourceBundle.getBundle(basename, locale);
        System.out.println(resourceBundle.getString("STARTING_MYAPP"));
    }
}

两个文件都在这里:

/home/dakoina/Documents/ResTestapp/ResTestApp.jar
/home/dakoina/Documents/ResTestapp/myresource.properties

甚至

c:/temp/ResTestApp.jar
c:/temp/myresource.properties

但是当我运行它时,它给了我这个输出:

dakoina@ubuntu:~/Documents/ResTestapp$ java -cp /home/dakoina/Documents/ResTestapp/ -jar "ResTestApp.jar"
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name myresource, locale en_US
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1539)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1278)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:805)
    at restestapp.ResTestApp.main(ResTestApp.java:19)

在 Windows 中,同样...

c:\temp>java -jar ResTestApp.jar
Exception in thread "main" java.util.MissingResourceException: Can't find bundle
 for base name myresource, locale en_US
        at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
        at java.util.ResourceBundle.getBundleImpl(Unknown Source)
        at java.util.ResourceBundle.getBundle(Unknown Source)
        at restestapp.ResTestApp.main(ResTestApp.java:19)
  [1]: http://stackoverflow.com/questions/3742158/using-resourcebundle-with-an-external-file-java

我看不出我错在哪里:/

【问题讨论】:

    标签: java properties resourcebundle


    【解决方案1】:

    -jar 表示:从给定的 jar 和它在清单中引用的所有 jar 组成类路径。所以-cp 选项被忽略了。

    你的命令行应该是:

    java -cp /home/dakoina/Documents/ResTestapp;/home/dakoina/Documents/ResTestapp/ResTestApp.jar the.main.Class
    

    也就是说,资源包用于加载国际化标签。如果您只想读取属性,最好使用java.util.Properties 类。

    【讨论】:

    • 'java -cp /home/dakoina/Documents/ResTestapp:/home/dakoina/Documents/ResTestapp/ResTestApp.jar ResTestApp.class' 似乎不起作用。找不到主类...
    • 你的班级被命名为restestapp.ResourceBundleTester。不是ResTestApp
    • 哦,对不起,实际上我复制了原始代码并忘记更改我的新类名(ResTestApp
    • 我知道您可以使用 Properties 或 ResourceBundle。我相信使用属性而不是 ResourceBundle 不会提高效率或任何东西。我错了吗?
    • 这不仅仅关乎效率(尽管属性会更快:ResourceBundle 在幕后使用属性)。只是Properties 用于从Properties 文件中读取Properties。 ResourceBundle 用于从一组属性文件和区域设置层次结构中读取国际化值。
    【解决方案2】:

    myresource.propertiesneeds to be in classpath for jar file

    将此属性文件放入jar并配置类路径(如链接中所述)

    【讨论】:

    • java -classpath c:/temp/ -jar ResTestApp.jar 像这样?如果是这样,那是行不通的:/
    • 请参阅@JB 描述的命令,或将其包含在您的jar 文件中并设置类路径
    • 抱歉,我无法将属性文件放入 jar 中
    • 当然,供以后参考:)
    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2011-05-06
    • 2017-05-10
    • 2016-06-01
    • 2018-08-31
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多