0

我想在我的项目中使用一些外部jar文件,但是当我运行该应用程序时,它给了我ether java.lang.IllegalStateExceptionjava.lang.ClassDefNotFoundError。我尝试了几乎所有在这里提到的方法,但找不到解决方案。我使用的ADT版本22和Android SDK版本17.java.lang.IllegalStateException/java.lang.ClassDefNotFoundError将外部罐子添加到Android项目

这里是日志:

8-26 16:50:21.022: E/AndroidRuntime(16642): FATAL EXCEPTION: main 
08-26 16:50:21.022: E/AndroidRuntime(16642): java.lang.NoClassDefFoundError: sun.misc.BASE64Encoder 
08-26 16:50:21.022: E/AndroidRuntime(16642): at com.test.testlibs.MainActivity.convertMD5(MainActivity.java:48) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at com.test.testlibs.MainActivity$1.onClick(MainActivity.java:30) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at android.view.View.performClick(View.java:4128) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at android.view.View$PerformClick.run(View.java:17142) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at android.os.Handler.handleCallback(Handler.java:615) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at android.os.Looper.loop(Looper.java:213) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at android.app.ActivityThread.main(ActivityThread.java:4787) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at java.lang.reflect.Method.invokeNative(Native Method) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at java.lang.reflect.Method.invoke(Method.java:511) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
08-26 16:50:21.022: E/AndroidRuntime(16642): at dalvik.system.NativeStart.main(Native Method) 

和类执行力度:

package com.test.testlibs; 

import sun.misc.BASE64Encoder; 

import com.test.testlibs.R.id; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button = (Button) findViewById(id.btnTest); 

     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       convertMD5(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    public void convertMD5() 
    { 

     TextView textView = (TextView) findViewById(id.txtTest); 
     String text = textView.getText().toString(); 

     BASE64Encoder base64Encoder = new BASE64Encoder(); 
     String uname64 = base64Encoder.encode(text.getBytes()); 

     Toast toast = Toast.makeText(getApplicationContext(), text+" "+uname64, Toast.LENGTH_LONG); 
     toast.show(); 
    } 
} 

我可以通过电子邮件发送我的项目,即使这是必要的太。

+0

你有没有检查过,如果你的库项目正确导入或不是,也可在工作区或不? – Piyush

+0

是的,我做到了。导入的文件也在工作区 – Sajirupee

+0

和您的类将在sun.misc包? – Piyush

回答

2

您正在使用Sun(Oracle)特定的类进行Base64编码(sun.misc.BASE64Encoder)。这个文件不会在android上可用。

我建议你使用android的Base64类代替编码/解码。作为额外的好处,你甚至不需要包含任何外部库。

+0

感谢您的建议。我会研究一下:) – Sajirupee

0

检查您的工作区是否在其类路径中包含JRE系统库。

实际上,我可以在异常堆栈中看到sun.misc.BASE64Encoder和BASE64Encoder.class的java.lang.NoClassDefFoundError存在于rt.jar中,即JRE System库的一部分。

+0

是的。 rt.jar文件位于类路径 – Sajirupee

+0

只是执行关闭项目并打开项目并重建项目。 – Sandy

0
08-26 16:50:21.022: E/AndroidRuntime(16642): java.lang.NoClassDefFoundError: sun.misc.BASE64Encoder 

您正在使用sun.misc.BASE64EncoderBase64 encoding.它没有找到,只要您的应用程序运行。

  1. 如果您想继续使用它,请尝试以下操作。

    Right Click your project-->properties-->Java Build path-->Order and export tab 
    
    then check the jars you are using. 
    

2.如果你有兴趣只在Base64编码,那么你可以尝试android.util.Base64Base64编码。