2010-03-10 5 views
4

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

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

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

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

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

  • Метод CEIL (двойной) не определено для типа Math
  • Метод DeleteAll() не определено для списка типа
  • Метод equalsIgnoreCase (Строка) не определено для типа Строка
  • метод GetWidth() не определено для типа Displayable

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

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

+0

Вы используете IDE или только Java ME SDK? –

+0

Я использую Eclipse. См. Мой комментарий к вашему ответу. – benvd

+0

Я «решил» проблему. Таким образом, когда я изменил целевое устройство в дескрипторе приложения (файл конфигурации, возможно, был специфичен для среды Eclipse J2ME), эмулятор CLDC 1.1 не распознается как таковой. Оказывается, он работает правильно, когда я создаю новую конфигурацию отладки (или запуска), где я могу настроить эмулятор на тот, который я хочу ... – benvd

ответ

1

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

EDIT: Некоторые способы, чтобы проверить версию CLDC Вашего устройства:

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

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

Да, эти методы действительно являются частью CLDC 1.1, я знаю различия. Я упомянул, что эмуляторы, которые я тестирую, поддерживают CLDC 1.1, поэтому у меня не должно быть таких проблем. Если эмуляторы действительно поддерживают CLDC 1.0 ...? – benvd

+0

Я считаю, что ваш emu лжет! Ответ отредактирован, чтобы включить некоторые способы сказать наверняка. – funkybro

+0

Я сделал новый проект и добавил строку System.getProperty, но напечатал «Версия CLDC: CLDC-1.1». Попытка построить мой настоящий проект с помощью одного и того же эмулятора по-прежнему вызывает те же ошибки. – benvd

0

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

По крайней мере, это то, что похоже на свойства проекта на Netbeans.

+0

Я использую Eclipse, но настройка для моего проекта установлена ​​на CLDC 1.1, а свойства устройства также указывают CLDC 1.1. – benvd

0

У меня такая же проблема сегодня (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 (дважды) не определено для типа Math Метод пола (двойной) не определено для типа Math Метод абс (INT) в типе Math не применяется для аргументов (двойной) Метод sqrt (double) не определен для типа Math

1

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

Чтобы это исправить: Перейти к Window> Preferences> Java ME> Device Managment>ваше-устройство> Edit ...> Библиотеки> cldc_1.0.jar> Удалить

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