2012-03-07 69 views
1

我已經構建了一個jar文件並試圖在j2me應用程序中使用它。我已經將jar包含在構建路徑中,並導入了所需的類。但是當我運行我的j2me應用程序時,我正在嘗試實例化存在於jar中的類的行中出現NoClassDefFound錯誤。j2me中的NoClassDefFoundError

我可以在java項目中實例化jar的類,但不能在j2me中實例化。

下面是錯誤日誌:

WARNING - MMA - C:/Builds/jme-sdk/javacall-javame-sdk-305/implementation/share/jsr135_mmapi/ju_mmconfig.c line 801: caps: optional settings missing: 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() lifecycle: event is JAVACALL_LIFECYCLE_MIDLET_SHUTDOWN status is 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) 

任何幫助,將不勝感激。

+0

在這裏發佈您的代碼。 – 2012-03-07 06:24:04

+1

我在新項目中測試你的類(當然沒有AppConstants,LocationCanvas,因爲我沒有它們)並且沒有發生錯誤! – hasanghaforian 2012-03-07 07:12:46

回答

1

終於可以解決問題了。
問題不在代碼中。這是由於彙編問題。

首先爲了解決NoClassDefFoundError,我不得不右鍵單擊項目,然後在構建路徑 - >順序和導出 - >檢查您添加的jar。

後來運行時我面臨classFormatError 56

創建的jar文件是使用1.6v編譯的。
而j2me應用程序正在編譯與1.3v

我不得不重新編譯我的庫項目1.3v並創建一個jar並將它用在j2me應用程序中。

這裏是鏈接指南:Build a Project from the Command Line - Java ME SDK

1

它指定在編譯時出現的類文件在運行時未找到。請檢查構建時間和運行時類路徑。