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

StackOverflow https://stackoverflow.com/questions/2415778

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Все это отлично работает в эмуляторе Nokia S60 FP1 3rd Edition.Это устройство поддерживает 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(строка) и несколько других не определены.

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

  • Метод ceil(double) не определен для типа Math
  • Метод deleteAll() не определен для списка типов
  • Метод equalsIgnoreCase(String) не определен для типа String
  • Метод getWidth() не определен для отображаемого типа

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

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

Это было полезно?

Решение

Похоже, вы используете методы, определенные в 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.

У меня возникла та же проблема сегодня (03.11.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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top