Проблемы версии MIDP 2.0: метод $ undefined для $type

Я написал мидлет, который выполняет несколько "продвинутых" задач: извлечение изображений из Интернета, изменение их размера, сохранение их на телефоне, их отображение.

Все это прекрасно работает в эмуляторе Nokia S60 3rd Edition FP1. Это устройство имеет поддержку MIDP 2.0 и CLDC 1.1 (также JSR75, который мне нужен для сохранения файлов). Он также работает как следует на Nokia E71 (физическое устройство).

Затем я попытался запустить мидлет на нескольких других эмуляторах. Один из них, DefaultCldcJtwiPhone2 из Java ME SDK 3.0, также заявляет о поддержке MIDP 2.0 и CLDC 1.1. Он не имеет JSR75, что объясняет, почему "FileConnection не может быть разрешен для типа".

Это, однако, не объясняет, почему List.deleteAll(), String.equalsIgnoreCase(String) и некоторые другие не определены.

Фактические ошибки, которые я получаю:

  • Метод ceil(double) не определен для типа Math.
  • Метод deleteAll () не определен для типа List
  • Метод equalsIgnoreCase (String) не определен для типа String
  • Метод getWidth() не определен для типа Displayable

Когда я смотрю на API MIDP 2.0 (т. Е. JSR118) ( http://java.sun.com/javame/reference/apis/jsr118/), я ясно вижу, что присутствуют все эти методы с тэгом "Since" быть либо MIDP 2.0 или CLDC 1.1.

Мой вопрос: почему эмулятор с поддержкой MIDP 2.0 не имеет доступа ко всем методам MIDP 2.0? Или, альтернативно, что я делаю не так?

4 ответа

Решение

Похоже, вы используете методы, определенные в CLDC 1.1; используемый вами эмулятор должен поддерживать только CLDC 1.0 (это, безусловно, объясняет отсутствие equalsIgnoreCase() и все, что связано с double а также float примитивы). Смотрите полный API здесь. И посмотрите здесь список различий между 1.0 и 1.1.

РЕДАКТИРОВАТЬ: Некоторые способы проверить версию вашего устройства CLDC:

1) Проверьте системное свойство microedition.configuration, как описано здесь.

System.out.println("The CLDC version is:  " + System.getProperty("microedition.configuration"));

2) Проверить существование класса, поддерживаемого только в 1.1.

try {
    Class.forName("java.lang.ref.WeakReference");
    System.out.println("It's CLDC 1.1");
} catch (ClassNotFoundException e) {
    System.out.println("It's CLDC 1.0");
}

Eclipse ссылается как на cldc_1.0.jar, так и на cldc_1.1.jar (а также на midp_2.0.jar и midp_2.1.jar).

Чтобы это исправить: Перейдите в "Окно"> "Установки"> "Java ME"> "Управление устройством"> " Ваше устройство" > "Редактировать..."> "Библиотеки"> cldc_1.0.jar> "Удалить".

Более подробную информацию вы можете найти здесь: http://thompsonng.blogspot.com/2009/09/j2me-setting-eclipse-to-use-cldc-11.html

Даже после того, как вы выбрали устройство эмулятора, которое поддерживает CLDC-1.1, например DefaultCldcJtwiPhone2, вы все равно можете настроить его для эмуляции только телефона CLDC-1.0.

По крайней мере, так выглядят свойства проекта в Netbeans.

Я получил ту же проблему сегодня (11/03/10) после обновления с: SDK 1.6.0_17 + eclipse ee 3.5.1 + советник Java_ME_platform_SDK_3.0. в: SDK 1.6.0_18 + eclipse ee 3.5.2 + Java_ME_platform_SDK_3.0.

Метод ceil(double) не определен для типа Math. Метод floor (double) не определен для типа Math. Метод abs (int) в типе Math не применим для аргументов (double). Метод sqrt(double) не определено для типа Math

Другие вопросы по тегам