资源束文件未找到,属性文件不在JAR包中。

3
关于资源包错误的问题,我已经阅读了其他关于相同主题的问题,但是并没有得到更多的启示。尝试了不同的方法,但都没有帮助。为了提供一些背景:我开发了一个小应用程序(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

我不知道哪里出了问题 :/
2个回答

4

-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'无法工作。找不到主类... - Jeankes
ن½ çڑ„ç±»هگچن¸؛restestapp.ResourceBundleTester,ن¸چوک¯ResTestAppم€‚ - JB Nizet
哦,对不起,实际上我复制了原始代码,忘记更改我的新类名(_ResTestApp_)。 - Jeankes
我了解您可以使用Properties或ResourceBundle。我相信使用Properties而不是ResourceBundle没有任何效率提升或其他好处。我错了吗? - Christian Vielma
这不仅仅是效率问题(虽然 Properties 会更快:ResourceBundle 在幕后使用 Properties)。问题在于 Properties 用于从 Properties 文件中读取属性。而 ResourceBundle 则用于从一组属性文件和语言环境层次结构中读取国际化值。 - JB Nizet

2

java -classpath c:/temp/ -jar ResTestApp.jar 这样行吗?如果是的话,那不起作用 :/ - Jeankes
请按照@JB的说明查看命令,或将其包含在您的jar文件中并设置类路径。 - jmj
抱歉,但我无法将属性文件放入JAR包中。 - Jeankes
当然,作为以后的参考 :) - Jeankes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接