Специальный код JSR-75 на устройствах, не являющихся JSR-75? - PullRequest
0 голосов
/ 22 марта 2010

Что я пытаюсь сделать

Я кодирую мидлет J2ME и хочу использовать JSR-75 для записи файлов. Я также хочу иметь возможность запускать мое приложение на устройстве, которое не поддерживает JSR-75.

Как я это делаю

Я нашел сайт, который объясняет, как это сделать (забыл URL, извините):

  • Создайте открытый абстрактный класс («Сервис»), который предоставляет все функциональные возможности.
  • Создать закрытый для пакета класс («ServiceImplementation»), расширяющий этот абстрактный класс и реализующий все функциональные возможности.
  • Поместите оба в отдельный пакет, оказывая услуги по оформлению фасада для пакета.

Для создания экземпляра этого класса используется следующий метод из абстрактного класса:

public static Service getInstance() {
    try {
        Class.forName("javax.microedition.io.file.FileConnection");
        Class c = Class.forName("my.package.Service");
        Service service = (Service) (c.newInstance());
        return service;
    } catch (Exception e) {
        return null;
    }
}

Что идет не так

Это прекрасно работает, когда присутствует JSR-75. Проблема в том, что я хочу, чтобы этот мидлет также работал на устройствах, не являющихся JSR-75, и этот код выдает исключение ClassNotFoundException: javax / microedition / io / file / FileConnection, когда я пытаюсь это сделать, даже если я перехватываю все исключения .

Я выполнил поиск по всему проекту, чтобы убедиться, что я не использую FileConnection нигде, кроме как в Service и ServiceImplementation.

Кто-нибудь знает, как я должен это сделать?

Ответы [ 2 ]

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

Немного запутался в том, что вы делаете, особенно с двумя классами в разных пакетах, которые оба называются Service!Но я столкнулся с этой проблемой при написании кода для запуска на трубках как с определенными JSR, так и без них.

Вы ссылаетесь на классы JSR-75 в своем классе Service?Я подозреваю, что даже если вы не создаете экземпляр класса Service, он все еще загружается.Затем JVM сталкивается с этими классами, которых нет.

Переместить все ссылки на классы JSR-75 в класс, на который ссылается класс Service.

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

Очевидно, я могу использовать это:

System.getProperty("microedition.io.file.FileConnection.version");

Если это возвращает ноль, JSR-75 не поддерживается.Если он возвращает что-то еще, это так.

...