java.util.MissingResourceException

时间:2010-04-14 10:19:28

标签: java resourcebundle

我在运行应用程序时遇到异常。此应用程序读取abc.properties文件,

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name abc, locale en_US
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:853)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:822)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:566)
    at com.ibm.dst.DailyExtract.getResourceBundle(DailyExtract.java:104)
    at com.ibm.dst.DailyExtract.main(DailyExtract.java:131)

abc.properties文件驻留在工作区中。 我使用RSA7作为IDE,有任何设置问题吗? 欢迎任何建议.....

提前多多感谢

6 个答案:

答案 0 :(得分:12)

按照this post中的提示,看看你是否犯了其中一个错误,可能是(从链接中复制粘贴):

  1. 这些资源属性文件由类加载器加载,类似于java类。因此,您需要将它们包含在运行时类路径中。

  2. 这些资源具有完全限定资源名称,类似于完全限定类名称,摘录您无法将资源导入Java源文件。为什么?因为它的名称采用字符串的形式。

  3. ResourceBundle.getBundle("config")告诉类加载器使用默认包(即没有包)加载名为“config”的资源。它并不意味着当前包中具有引用类的资源。

  4. ResourceBundle.getBundle("com.cheng.scrap.config")告诉类加载器使用包“com.cheng.scrap”加载名为“config”的资源。它的完全限定资源名称是“com.cheng.scrap.config”

答案 1 :(得分:2)

您只需在获取文件时添加包名称

例如,如果您的属性名称是包a.b.c中的“ABC.properties”,那么下面的代码将完美地运行

ResourceBundle labels = ResourceBundle.getBundle("a.b.c.ABC");

答案 2 :(得分:2)

只需将资源文件复制到您的类文件所在的位置即可。

在我的情况下,我的目录是:

bin 
  - com 
     - brookf 
        - all my packages here. 

将资源文件复制到bin文件夹。

答案 3 :(得分:1)

加载本地化内容的属性文件也会受到包命名的影响。如果您将属性文件放在org.example.com.foobar这样的包中,并仅使用其名称abc加载它,则还必须添加前缀org.example.com.foobar。如果您将属性放在不同的位置(例如在根目录或另一个子目录中),则必须更改要加载的名称或类路径。

我将属性文件放在.java文件所在的同一位置并使用

之类的东西运行正常
private static ResourceBundle RES = ResourceBundle.getBundle(NameOfTheCurrentClass.class.getCanonicalName());

答案 4 :(得分:1)

今天我遇到了同样的问题,我花了一段时间才弄清楚了(我用Eclipse作为IDE)。我的项目文件夹包含以下路径中的* .properties文件:

project/src/strings

由于strings是src的子文件夹,src已经在项目的构建路径中(参见Property Window),我只需要为* .properties-Files添加包含模式:

**/*.properties

* .java-Files(** / * .java)已经存在包含模式

也许你的IDE有类似的东西

答案 5 :(得分:0)

您的类路径中的文件是?如果是,请尝试将其重命名为abc_en_US.properties