为什么我会得到MissingResourceException

时间:2017-08-17 16:56:35

标签: java resourcebundle

为什么会抛出MissingResourceException?我错了还是不错 ListResourceBundles的重点是在代码中提供资源吗?

public class Hello extends Thread {

    public static void main(String[] args) {

         ResourceBundle resBundle = ResourceBundle.getBundle("ResourceBundle", new Locale("it", "IT", ""));
         System.out.println(resBundle.getObject(new Integer(1).toString()));
    }


}

在单独的文件中:

public class ResourceBundle_it_IT extends ListResourceBundle {

    public Object[][] getContents() {
        return contents;
    }
    static final Object[][] contents = {
        {"1", "Uno"},
        {"2", "Duo"},
        {"3", "Trie"},};

}

我的错误:

 run:
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name ResourceBundle, locale it_IT
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
    at hello.Hello.main(Hello.java:21)
/home/maxbisesi/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

2 个答案:

答案 0 :(得分:3)

当您收到错误并尝试了解原因时,第一步是始终以读取错误的堆栈跟踪。在这种情况下,堆栈跟踪是

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name ResourceBundle, locale it_IT
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
    at Hello.main(Hello.java:9)
Caused by: java.lang.IllegalAccessException: Class java.util.ResourceBundle$Control can not access a member of class ResourceBundle_it_IT with modifiers ""
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
    at java.lang.Class.newInstance(Class.java:436)
    at java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:2645)
    at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1501)
    at java.util.ResourceBundle.findBundle(ResourceBundle.java:1465)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1361)
    ... 2 more

如果你读了它,问题就变得很明显了:

  

类java.util.ResourceBundle $ Control无法使用修饰符访问类ResourceBundle_it_IT的成员""

将类ResourceBundle_it_IT移动到它所属的onwn文件。如错误消息所示,将其公开,问题就会消失。

答案 1 :(得分:0)

通常,当代表您资源的类不公开时,由于属性值需要公开才能进行扫描,因此请检查您的类是否正确标记为public