为什么会抛出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)
答案 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