我正在研究一个使用类ResourceBundle和ListResourceBundle.
该示例演示了如何使用名为 SampleRB 的资源包。
编译后我不断收到错误:
Английская версия программы:
Exception in thread "main" java.lang.NullPointerException
at java.util.ListResourceBundle.loadLookup(ListResourceBundle.java:202)
at java.util.ListResourceBundle.handleGetObject(ListResourceBundle.java:130)
at java.util.ResourceBundle.getObject(ResourceBundle.java:441)
at java.util.ResourceBundle.getString(ResourceBundle.java:407)
at LRBDemo.LRBDemo.main(LRBDemo.java:12)
该程序本身由LRBDemo类和主启动方法组成:
public class LRBDemo {
public static void main(String[] args) {
// загрузить комплект ресурсов по умолчанию
ResourceBundle rd = ResourceBundle.getBundle("LRBDemo.SampleRB");
System.out.println("Английская версия программы: ");
System.out.println("Строка по ключу Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
// загрузить комплект ресурсов для поддержки немецкого языка
rd = ResourceBundle.getBundle("LRBDemo.SampleRBde", Locale.GERMAN);
System.out.println("\nНемецкая версия программы: ");
System.out.println("Строка для ключа Title: " + rd.getString("title"));
System.out.println("Строка по ключу StopText: " + rd.getString("StopText"));
System.out.println("Строка по ключу StartText: " + rd.getString("StartText"));
}
}
具有英语语言支持的SampleRB类:
public class SampleRB extends ListResourceBundle {
protected Object[][] getContents() {
Object[][] resources = new Object[3][2];
resources[0][0] = "title";
resources[0][1] = "MyProgram";
resources[1][0] = "StopText";
resources[1][1] = "Stop";
resources[1][0] = "StartText";
resources[2][1] = "Start";
return resources;
}
}
以及具有德语支持的SampleRBde类:
public class SampleRBde extends ListResourceBundle {
protected Object[][] getContents() {
Object[][] resources = new Object[3][2];
resources[0][0] = "title";
resources[0][1] = "Mein Programm";
resources[1][0] = "StopText";
resources[1][1] = "Anschlag";
resources[2][0] = "StartText";
resources[2][1] = "Anfang";
return resources;
}
}
代码本身不会显示错误,但是如果我在LRBDemoResourceBundle rd = ResourceBundle.getBundle("LRBDemo.SampleRB")类中以这种方式ResourceBundle rd = ResourceBundle.getBundle("SampleRB")而不是字符串而不是rd = ResourceBundle.getBundle("LRBDemo.SampleRBde", Locale.GERMAN);这样编写rd = ResourceBundle.getBundle("SampleRBde", Locale.GERMAN);,也就是说,我删除了类包,那么我得到了输出:
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name SampleRB, locale ru_RU
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:773)
at LRBDemo.LRBDemo.main(LRBDemo.java:9)
我的项目结构:
对于如何消除错误并最终显示结果的建议,我将不胜感激。



1) 固定指标:
代替
所以
2)
或者