2012-07-08 55 views
0

Possible Duplicate:
NoClassDefFoundError importing a library project黑莓应用程序抛出java.langNoClassDefFoundError

我的黑莓应用程序突然停止工作。我的模拟器或/和我的应用程序不加载,我得到“未捕获的异常:java.lang.NoClassDefFoundError”。自从我上次测试以来,我没有对代码进行任何更改。出了什么问题?

package mypackage; 

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.rmi.RemoteException; 
import java.util.Hashtable; 
import java.util.Vector; 

import javacard.framework.UserException; 

import javax.microedition.io.Connector; 
import javax.microedition.io.HttpConnection; 
import javax.microedition.location.Location; 
import javax.microedition.location.LocationProvider; 

import org.kobjects.base64.Base64; 
import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransport; 
import org.xmlpull.v1.XmlPullParserException; 

import net.rim.device.api.system.*; 
import net.rim.device.api.ui.*; 
import net.rim.device.api.ui.component.*; 
import net.rim.device.api.ui.component.pane.TitleView; 
import net.rim.device.api.ui.container.*; 
import net.rim.device.api.ui.image.Image; 

public class LoginTest extends UiApplication 
{ 

    public static void main(String[] args) 
    { 
     //Create a new instance of the app 
     //and start the app on the event thread. 

     LoginTest app = new LoginTest(); 
     app.enterEventDispatcher(); 
    } 

    public LoginTest() 
    { 
     //Display a new screen. 
     pushScreen(new LoginTestScreen()); 
    } 

} 

//Create a new screen that extends MainScreen and provides 
//behaviour similar to that of other apps. 

final class LoginTestScreen extends MainScreen 
{ 
    //declare variables for later use 
    private InfoScreen _infoScreen; 
    private ObjectChoiceField choiceField; 
    private int select; 
    BasicEditField username; 
    PasswordEditField passwd; 
    CheckboxField checkBox1; 
    ButtonField loginBtn; 


    public LoginTestScreen() 
    { 
     //Invoke the MainScreen constructor. 

     super(); 

     //Add a screen title. 

     setTitle("Track24ELMS"); 

     LabelField login = new LabelField("ELMS Login", LabelField.FIELD_HCENTER); 
     login.setFont(Font.getDefault().derive(Font.BOLD, 30)); 
     login.setMargin(10, 0, 20, 0); //To leave some space from top and bottom 

     HorizontalFieldManager user = new HorizontalFieldManager(); 
     user.setMargin(0, 0, 10, 0); 
     HorizontalFieldManager pass = new HorizontalFieldManager(); 
     pass.setMargin(0, 0, 20, 0); 
     HorizontalFieldManager checkbox = new HorizontalFieldManager(); 
     checkbox.setMargin(0, 0, 30, 0); 
     HorizontalFieldManager btns = new HorizontalFieldManager(HorizontalFieldManager.FIELD_HCENTER); 

     LabelField usernameTxt = new LabelField("Username :"); 
     LabelField passwordTxt = new LabelField("Password :"); 

     username = new BasicEditField(); 
     passwd = new PasswordEditField(); 

     loginBtn = new ButtonField("Login", ButtonField.CONSUME_CLICK); 
     loginBtn.setChangeListener(new LoginButtonListener()); 

     checkBox1 = new CheckboxField("Remember me",false); 

     user.add(usernameTxt); 
     user.add(username); 
     pass.add(passwordTxt); 
     pass.add(passwd); 
     btns.add(loginBtn); 
     add(login); 
     add(user); 
     add(pass); 
     add(checkBox1); 
     add(btns); 

} 

    private class LoginButtonListener implements FieldChangeListener { 
     public void fieldChanged(Field field, int context) { 
//Open a new screen 

     String uname = username.getText(); 
     String pwd = passwd.getText(); 
     String sep = "</>"; 
     //If there is no input 
     if (uname.length() == 0 || pwd.length()==0) 
     Dialog.alert("One of the textfield is empty!"); 
     else 
     { 
      String URL = "http://xxx.xxx.com/xxx/xxx.asmx"; 
      String METHOD_NAME = "ValidateCredentials"; 
      String NAMESPACE = "http://tempuri.org/"; 
      String SOAP_ACTION = NAMESPACE+METHOD_NAME; 
      //final String URL = "http://prerel.track24elms.com/Android/T24AndroidLogin.asmx/ValidateCredentials"; 

      SoapObject resultRequestSOAP = null; 
      HttpConnection httpConn = null; 
      HttpTransport httpt; 
      System.out.println("The username" + uname + "password" + pwd); 
      SoapPrimitive response = null; 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      //String usernamecode = Base64.encode(uname.getBytes()); 
      //String pwdEncodeString = Base64.encode(pwd.getBytes()); 
      request.addProperty("username", uname); 
      request.addProperty("password", pwd); 
      System.out.println("The request is=======" + request.toString()); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      //envelope.bodyOut = request; 
      envelope.dotNet = true; 
      //envelope.encodingStyle = SoapSerializationEnvelope.XSD; 
      envelope.setOutputSoapObject(request); 
      System.out.println("The envelope has the value++++"+ envelope.toString()); 

      /* URL+ Here you can add paramter so that you can run on device,simulator etc. this will work only for wifi */ 
      httpt = new HttpTransport(URL+ ";deviceside=true;ConnectionUID=S TCP"); 
      //httpt.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 
      httpt.debug = true; 
      try 
      { 
       System.out.println("SOAP_ACTION == " + SOAP_ACTION); 
       httpt.call(SOAP_ACTION, envelope); 
       response = (SoapPrimitive) envelope.getResponse(); 
       String result = response.toString(); 
       System.out.println("response == " + result); 
       resultRequestSOAP = (SoapObject) envelope.bodyIn; 
       System.out.println("result == " + resultRequestSOAP); 

       String[] listResult = split(result, sep); 


      } 
      catch (IOException e) { 
       // TODO Auto-generated catch block 
       System.out.println("The exception is IO==" + e.getMessage()); 
      } catch (XmlPullParserException e) { 

       // TODO Auto-generated catch block 
       System.out.println("The exception xml parser example===" 
         + e.getMessage()); 
      } 
      System.out.println(resultRequestSOAP); 
      //UiApplication.getUiApplication().pushScreen(new InfoScreen()); //Open a new Screen 

     } 
     } 

     }; 

    private String[] split(String original, String separator) { 
      Vector nodes = new Vector(); 
      int index = original.indexOf(separator); 
      while (index >= 0) { 
       nodes.addElement(original.substring(0, index)); 
       original = original.substring(index + separator.length()); 
       index = original.indexOf(separator); 
      } 
      nodes.addElement(original); 
      String[] result = new String[nodes.size()]; 
      if (nodes.size() > 0) { 
       for (int loop = 0; loop < nodes.size(); loop++) { 
        result[loop] = (String) nodes.elementAt(loop); 
        System.out.println(result[loop]); 
       } 
      } 
      return result; 
     } 

    //To display a dialog box when a BlackBerry device user 
    //closes the app, override the onClose() method. 

    public boolean onClose() 
    { 
     Dialog.alert("Goodbye!"); 
     System.exit(0); 
     return true; 
    } 

    //Create a menu item for BlackBerry device users to click to see more 
    //information about the city they select. 

    private MenuItem _viewItem = new MenuItem("More Info", 110, 10) 
    { 
     public void run() 
     { 
      //Store the index of the city the BlackBerry device user selects 

      select = choiceField.getSelectedIndex(); 

      //Display a new screen with information about the 
      //city the BlackBerry device user selects 

       _infoScreen = new InfoScreen(); 
       UiApplication.getUiApplication().pushScreen(_infoScreen); 
     } 
    }; 

    //Create a menu item for BlackBerry device users to click to close 
    //the app. 

    private MenuItem _closeItem = new MenuItem("Close", 200000, 10) 
    { 
     public void run() 
     { 
      onClose(); 
     } 
    }; 


    //Create an inner class for a new screen that displays 
    //information about the city a BlackBerry device user selects. 

    private class InfoScreen extends MainScreen 
    { 
     String latitude, logitude, altitude; 

     public InfoScreen() 
     { 
      super(); 

      setTitle("Itinerary"); 


      LabelField login = new LabelField("Employee Itinerary", LabelField.FIELD_HCENTER); 

      HorizontalFieldManager userDetails = new HorizontalFieldManager(); 
      userDetails.setMargin(0, 0, 10, 0); 
      HorizontalFieldManager statusBox = new HorizontalFieldManager(); 
      statusBox.setMargin(0, 0, 20, 0); 
      HorizontalFieldManager locationDetails = new HorizontalFieldManager(); 
      locationDetails.setMargin(0, 0, 30, 0); 
      HorizontalFieldManager imgBtn = new HorizontalFieldManager(); 
      imgBtn.setMargin(0, 0, 40, 0); 

      //BitmapField userImg = new BitmapField(Bitmap.getBitmapResource("img1.jpg")); 
      LabelField userFetched = new LabelField("Sarah Farukh"); 
      LabelField lastStatus = new LabelField("I am OK"); 
      EditField statusMsg = new EditField("Status Message", "Update status here"); 

      EditField lat = new EditField("Latitude", "latitude"); 
      EditField longi = new EditField("Longitude", "logitude"); 
      EditField alti = new EditField("Attitude", "altitude"); 

      //BitmapField btnOK = new BitmapField(Bitmap.getBitmapResource("ok.png"),Field.FIELD_BOTTOM); 
      //BitmapField btnNO = new BitmapField(Bitmap.getBitmapResource("no.png"),Field.FIELD_BOTTOM); 
      //BitmapField btnHN = new BitmapField(Bitmap.getBitmapResource("hn.png"),Field.FIELD_BOTTOM); 

      //userDetails.add(userImg); 
      userDetails.add(userFetched); 
      userDetails.add(lastStatus); 
      statusBox.add(userFetched); 
      locationDetails.add(lat); 
      locationDetails.add(longi); 
      locationDetails.add(alti); 
      //imgBtn.add(btnOK); 
      //imgBtn.add(btnNO); 
      //imgBtn.add(btnHN); 
      add(login); 
      add(userDetails); 
      add(statusBox); 
      add(locationDetails); 
      add(imgBtn); 


     } 
    } 
} 
+0

我总是干净/重建/重新启动模拟器时,这样的事情发生。但是,假设问题没有消失,你能告诉我们更多关于这个消息吗? **它在哪里抛出这个异常?你可能需要放一个'try {} catch(Throwable t){t.printStackTrace(); }'在你的'main()'方法中阻塞。 – Nate 2012-07-08 11:26:44

+0

在调试期间,首先在“loginBtn.setChangeListener(new LoginButtonListener());”处引发错误。我已检查构建路径,并且库已正确包含。 – Sarah 2012-07-08 11:48:48

+0

嗯。所以,它可能找不到'LoginButtonListener',这是你自己的类之一。我可能会**清理模拟器,然后重新启动它。 – Nate 2012-07-08 11:50:30

回答

2

您可能正在访问单独库中的类。你已经建立了你的项目,以便在建造时发现这个课程

如果该库由于某种原因未部署到设备(部署时忘记?错误?),那么您的类在运行时将不会找到

请确保将此库正确地部署到设备上(通过上传正确的编译COD文件)。 或者通过正确设置构建路径将库包含到您的项目中。

(基于这一个我的回答:NoClassDefFoundError importing a library project