2017-08-17 76 views
0

为什么会抛出MissingResourceException?我错了还是不是 ListResourceBundles的目的是提供代码中的资源?为什么我会得到MissingResourceException

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) 

回答

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 

如果你读它,这个问题变得很明显:

Class java.util.ResourceBundle$Control can not access a member of class ResourceBundle_it_IT with modifiers ""

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

+0

奇怪,那不是我得到的错误 – madmax

+0

我把Bundle作为公共类移动到它自己的文件中,仍然会得到相同的错误? – madmax

+0

ResourceBundle_it_IT类的包是什么? –