Странная ошибка с Locale.getISOCountries () - PullRequest
2 голосов
/ 03 апреля 2009

Я использую этот код:

    for (final String code : Locale.getISOCountries())
    {
        //stuff here
    }

Но при компиляции я получаю эту ошибку:

[ERROR] Line 21: No source code is available for type java.util.Locale; did you forget to inherit a required module?

А затем трассировка стека ошибок компилятора.

Я делаю оба этих импорта в начале класса:

package com.me.example;

import java.util.Locale;
import java.util.*;

Что может быть не так?

В Netbeans я вижу параметры автозаполнения и нет синтаксической ошибки для объекта Locale ...

Ответы [ 3 ]

3 голосов
/ 03 апреля 2009

Что-то пошло не так с вашей настройкой, следующая программа прекрасно работает для меня.

import java.util.*;
import java.util.Locale;
public class Donors {
    public static void main (String [] args) {
        for (final String code : Locale.getISOCountries()) {
            System.out.println (code);
        }
    }
}

Тот факт, что он запрашивает код source , заставляет меня поверить, что он пытается скомпилировать или запустить его в каком-то режиме отладки. Вам не нужен исходный код для java.util. * Для компиляции, это просто странно.

Посмотрите, работает ли моя простая тестовая программа в вашей среде, затем попробуйте поискать что-нибудь в этом направлении (варианты отладки). Последний шаг: скомпилируйте ваш код с базовым javac (не NetBeans).

UPDATE:

На самом деле я что-то нашел. Если вы создаете приложения GWT, я не думаю, что java.util.Locale доступен на стороне клиента (только на стороне сервера). Все ссылки в Интернете на это сообщение об ошибке указывают на GWT и его ограничения на стороне клиента, которые, в конце концов, преобразованы в вкусности Javascript, поэтому нельзя ожидать поддержки всего набора библиотек Java.

На этой странице здесь показано, как сделать i18n в приложениях GWT, и нет упоминания о java.util.Locale, кроме как на стороне сервера.

1 голос
/ 03 апреля 2009

Похоже, что в вашей среде сборки может быть что-то подозрительное, так как Locale.getISOCountries() должно работать нормально. Попробуйте скомпилировать небольшую тестовую программу вручную и посмотрите, не появляется ли такая же ошибка.

0 голосов
/ 03 апреля 2009

Определенно попытайтесь свести это к минимуму трехстрочной программе (или около того), скомпилировать из командной строки, затем поместить этот класс в вашу IDE и посмотреть, по-прежнему ли вы получаете ошибку, а если нет, изменяйте / добавляйте по одной строке за раз, пока у вас не появится исходная неисправная программа, которая ищет причину проблемы. Я думаю, может быть, какой-то другой импорт в вашем коде импортирует класс Locale? Зачем в мире искать исходный код?

Посмотрите, что произойдет, когда вы скомпилируете это из командной строки:

import java.util.*;

public class LocaleTest {
  public static void main(String[] args) {
    Locale.getISOCountries();
  }
}
...