NoClassDefFoundError в j2me - PullRequest
       52

NoClassDefFoundError в j2me

1 голос
/ 07 марта 2012

Я создал файл jar и пытаюсь использовать его в приложении j2me. Я включил jar в путь сборки и также импортировал необходимые классы. Но когда я запускаю свое приложение j2me, я получаю сообщение NoClassDefFound Error в строке, где я пытаюсь создать экземпляр класса, который присутствует в банке.

Я могу создавать экземпляры классов jar в проекте java, но не в j2me.

Ниже приведен журнал ошибок:

ВНИМАНИЕ - ММА - C: /Builds/jme-sdk/javacall-javame-sdk-305/implementation/share/jsr135_mmapi/ju_mmconfig.c строка 801: прописные буквы: отсутствуют дополнительные настройки: SuspendBehavior java.lang.NoClassDefFoundError: com / canvasm / ida / gps / LocationUpdater - com.test.ida.HelloIDA. (HelloIDA.java:11) - java.lang.Class.newInstance (), bci = 0 - com.sun.midp.main.CldcMIDletLoader.newInstance (), bci = 46 - com.sun.midp.midlet.MIDletStateHandler.createMIDlet (), bci = 66 - com.sun.midp.midlet.MIDletStateHandler.createAndRegisterMIDlet (), bci = 17 - com.sun.midp.midlet.MIDletStateHandler.startSuite (), bci = 27 - com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite (), bci = 52 - com.sun.midp.main.CldcMIDletSuiteLoader.startSuite (), bci = 8 - com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite (), bci = 161 - com.sun.midp.main.AppIsolateMIDletSuiteLoader.main (), bci = 26 javacall_lifecycle_state_oted () жизненный цикл: событие JAVACALL_LIFECYCLE_MIDLET_SHUTDOWN - JAVACALL_OK

TestApp (приложение j2me):

import com.test.gps.LocationUpdater;

public class Hello extends MIDlet {

public Hello() {
    LocationUpdater loc = new LocationUpdater();
    System.out.println("Loc updater object :"+loc.toString());
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    // TODO Auto-generated method stub

}

protected void pauseApp() {
    // TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {


}

}

Основной класс JAR-файла:

public class LocationUpdater {

private boolean isUpdateSuccess = false;


public static void main(String[] args){


}

public boolean updateLocation(final String serverUrl, final String userMSISDN) throws LocationException{
    AppConstants.url = serverUrl;
    AppConstants.msisdn = userMSISDN;

    LocationCanvas loc = new LocationCanvas();
    isUpdateSuccess = loc.getLocation(serverUrl, userMSISDN);

    return isUpdateSuccess;
}

}

Класс LocationCanvas:

 public class LocationCanvas {

private Location location;
private LocationProvider locationProvider;
private Coordinates coordinates;
private Criteria criteria;
private Timer tm;
private double lat, lon;
private String posturl;
private boolean status,updateStatus;

public LocationCanvas() {


}

public boolean getLocation(String url, String msisdn) {

    tm = new Timer();

    criteria = new Criteria();
    criteria.setHorizontalAccuracy(500);

    try {

        locationProvider = LocationProvider.getInstance(criteria);

        if (locationProvider != null) {

            tm.wait(4000);

            try {
                location = locationProvider.getLocation(2000);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            coordinates = (Coordinates)location.getQualifiedCoordinates();
            if (coordinates != null) {
                // Use coordinate information
                lat = coordinates.getLatitude();
                lon = coordinates.getLongitude();

                System.out.println("Latitude :"+lat);
                System.out.println("Longitude :"+lon);
            }

            posturl = url + "?IMEI=" + msisdn
                    + "&positioningtype=" + "gps" + "&locationdata=" + lat
                    + "," + lon;


        }else{
            //return false.. cos location provider is null
            updateStatus = false;
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return updateStatus;

}

журнал ошибок:

Exception in thread "main" java.lang.NoClassDefFoundError:
    javax/microedition/location/Coordinates
at com.canvasm.ida.gps.LocationUpdater.updateLocation(LocationUpdater.java:17)
at com.test.HelloTest.main(HelloTest.java:10)
Caused by: java.lang.ClassNotFoundException: javax.microedition.location.Coordinates
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

Буду признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Наконец-то удалось решить проблему.
Проблема была не в коде.Это было связано с проблемой компиляции.

Прежде всего, чтобы решить NoClassDefFoundError, я должен был щелкнуть правой кнопкой мыши на проекте и в пути сборки -> порядок и экспорт -> проверить имеющуюся банкудобавлено.

Позже во время работы я столкнулся с classFormatError 56 .

Файл JAR, который был создан, был скомпилирован с использованием 1.6v .
И приложение j2me было скомпилировано с 1.3v .

Мне пришлось перекомпилировать мой библиотечный проект с 1.3v, создать из него jar и использовать его в приложении j2me.

Вот ссылка на руководство: Сборка проекта из командной строки - Java ME SDK

1 голос
/ 07 марта 2012

Указывает, что файл класса, присутствующий во время компиляции, не найден во время выполнения. Проверьте время компоновки и пути к классам во время выполнения.

...