【问题标题】:NoClassDefFoundError in j2mej2me 中的 NoClassDefFoundError
【发布时间】:2012-07-26 05:24:41
【问题描述】:

我已经构建了一个 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 - 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_changed() 生命周期:事件是 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)

任何帮助将不胜感激。

【问题讨论】:

  • 我在新项目中测试你的类(当然没有 AppConstants,LocationCanvas,因为我没有它们)并且没有发生错误!

标签: java-me jar midp jsr179


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    终于可以解决问题了。
    问题不在代码中。这是由于编译问题。

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

    后来在运行时遇到 classFormatError 56

    创建的 jar 文件是使用 1.6v 编译的。
    并且 j2me 应用程序正在使用 1.3v 进行编译。

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

    这里是指导链接:Build a Project from the Command Line - Java ME SDK

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多