Проблемы версии MIDP 2.0: метод $ не определен для типа $ - PullRequest
4 голосов
/ 10 марта 2010

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

Все это прекрасно работает в эмуляторе 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 ]

1 голос
/ 22 июля 2011

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

Чтобы исправить это: Перейдите в «Окно»> «Установки»> «Java ME»> «Управление устройством»> your-device > «Правка»> «Библиотеки»> cldc_1.0.jar> Remove

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

1 голос
/ 10 марта 2010

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

EDIT: Несколько способов проверить версию 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");
}
0 голосов
/ 12 марта 2010

У меня такая же проблема сегодня (11/03/10) после обновления с: SDK 1.6.0_17 + eclipse ee 3.5.1 + Java_ME_platform_SDK_3.0 EA. чтобы: 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

0 голосов
/ 10 марта 2010

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

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

...