调试时的BlackBerry应用程序抛出java.langNoClassDefFoundError

时间:2012-07-08 11:14:13

标签: blackberry noclassdeffounderror

  

可能重复:
  NoClassDefFoundError importing a library project

我的黑莓应用程序突然停止工作。我的模拟器或/和我的应用程序没有加载,我得到“未捕获的异常: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);


        }
   }
}

1 个答案:

答案 0 :(得分:2)

您可能正在访问单独库中的类。您已经设置了项目,以便在构建时找到类

如果由于某种原因未将该库部署到设备(忘记了?部署时出错?),那么您的课程在运行时将无法找到。

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

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