Страницы

Поиск по вопросам

среда, 17 июля 2019 г.

Ошибка при интернационализации прикладной программы Java

Изучаю пример с применением интернационализации с помощью классов 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 с запускающим методом main-ом:
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("
Немецкая версия программы: "); 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; } }
Сам код не отображает ошибок, но если я пропишу в классе LRBDemo вместо строки ResourceBundle 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) Исправил индексы:
вместо
resources[1][0] = "StartText"; resources[2][1] = "Start";
так
resources[2][0] = "StartText"; resources[2][1] = "Start";
2)
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("
Немецкая версия программы: "); System.out.println("Строка для ключа Title: " + rd.getString("title")); System.out.println("Строка по ключу StopText: " + rd.getString("StopText")); System.out.println("Строка по ключу StartText: " + rd.getString("StartText")); } }
или
public class LRBDemo { public static void main(String[] args) { // загрузить комплект ресурсов по умолчанию ResourceBundle rd = ResourceBundle.getBundle(SampleRB.class.getName());
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(SampleRBde.class.getName());
System.out.println("
Немецкая версия программы: "); System.out.println("Строка для ключа Title: " + rd.getString("title")); System.out.println("Строка по ключу StopText: " + rd.getString("StopText")); System.out.println("Строка по ключу StartText: " + rd.getString("StartText")); } }

Комментариев нет:

Отправить комментарий