Java me j2me中的NoClassDefFoundError

Java me j2me中的NoClassDefFoundError,java-me,jar,midp,jsr179,Java Me,Jar,Midp,Jsr179,我已经构建了一个jar文件,并试图在j2me应用程序中使用它。我已经将jar包含在构建路径中,并导入了所需的类。但是当我运行我的j2me应用程序时,我在尝试实例化jar中存在的类的行中得到NoClassDefFound错误 我可以在java项目中实例化jar类,但不能在j2me中实例化 以下是错误日志: 警告-MMA- C:/Builds/jme-sdk/javacall-javame-sdk-305/implementation/share/jsr135_mmapi/ju_mmconfig.C

我已经构建了一个jar文件,并试图在j2me应用程序中使用它。我已经将jar包含在构建路径中,并导入了所需的类。但是当我运行我的j2me应用程序时,我在尝试实例化jar中存在的类的行中得到NoClassDefFound错误

我可以在java项目中实例化jar类,但不能在j2me中实例化

以下是错误日志:

警告-MMA- 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 -HelloIDA.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.AbstractMidleSuiteLoader.StartSite(),bci=52 -com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(),bci=8 -com.sun.midp.main.AbstractMidleSuiteLoader.RunMidleSuite(),bci=161 -com.sun.midp.main.AppIsolateMidleSuiteLoader.main(),bci=26 javacall\u lifecycle\u state\u changed()生命周期:事件为 JAVACALL\u LIFECYCLE\u MIDLET\u关机状态为JAVACALL\u OK

TestApp(j2me应用程序):

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;

}
错误日志:

线程“main”java.lang.NoClassDefFoundError中出现异常: javax/microedition/location/Coordinates 在com.canvasm.ida.gps.LocationUpdater.updateLocation(LocationUpdater.java:17) 位于com.test.HelloTest.main(HelloTest.java:10) 原因:java.lang.ClassNotFoundException:javax.microedition.location.Coordinates 位于java.net.URLClassLoader$1.run(URLClassLoader.java:202) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:190) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:307)
任何帮助都将不胜感激。

它指定编译时存在的类文件在运行时找不到。请检查生成时和运行时类路径。

最终能够解决此问题。
问题不在代码中。这是由于汇编问题

首先要解决
NoClassDefFoundError
,我必须右键单击项目,然后在构建路径->订单和导出->检查您添加的jar

后来在运行时,我遇到了类格式错误56

创建的jar文件是使用1.6v编译的
j2me应用程序是用1.3v编译的

我不得不用
1.3v
重新编译我的库项目,并用它创建一个jar,然后在j2me应用程序中使用它


以下是指南链接:

我在新项目中测试您的类(当然没有AppConstants、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;

}