0

내 프로젝트에서 일부 외부 jar 파일을 사용하려고하지만 애플리케이션을 실행할 때 ether java.lang.IllegalStateException 또는 java.lang.ClassDefNotFoundError이 표시됩니다. 나는 여기에 언급 된 거의 모든 방법을 시도했지만 해결책을 찾지 못했습니다. 이 필요한 경우에도 내 프로젝트를 이메일로 보낼 수 있습니다java.lang.IllegalStateException/java.lang.ClassDefNotFoundError 외부 Jar를 Android 프로젝트에 추가

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(); 
    } 
} 

:

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) 

및 클래스도 구현 : 나는 로그를 ADT 버전 (22)과 안드로이드 SDK 버전 여기에 17

이다 사용하고 있습니다 너무.

+0

라이브러리 프로젝트를 제대로 가져 왔는지, 또는 작업 영역에서 사용할 수 없으며 사용할 수 있는지 여부를 확인 했습니까 ?? – Piyush

+0

예. 가져온 파일도 작업 공간 – Sajirupee

+0

에 있고 수업은 sun.misc 패키지에 포함됩니까 ?? – Piyush

답변

2

Base64 인코딩 (sun.misc.BASE64Encoder)을 위해 Sun (Oracle) 특정 클래스를 사용하고 있습니다. 이 파일은 안드로이드에서 사용할 수 없습니다.

인코딩/디코딩 대신에 Android의 Base64 클래스를 사용하는 것이 좋습니다. 추가적인 이점으로 외부 라이브러리를 포함 할 필요조차 없습니다.

+0

제안 해 주셔서 감사합니다. 나는 그것에 대해 살펴볼 것입니다 :) – Sajirupee

0

프로젝트의 /libs 폴더에 .jar 파일을 추가하십시오.

지금 바로 .jar 파일 빌드 경로를 경로를 구축하는>추가를 클릭합니다.

프로젝트를 다시 빌드하고 실행하십시오.

또한이 https://stackoverflow.com/a/2267049/826657 &이 How to get the JAR file for sun.misc.BASE64Encoder class?

BASE64ENCODER 클래스에 보일 수 있습니다 모든 JVM에 사용할 수 없습니다.

+0

도 그렇게했습니다. 여러 번 :/ – Sajirupee

0

작업 공간의 클래스 경로에 JRE 시스템 라이브러리가 있는지 확인하십시오.

사실 예외 스택에서 sun.misc.BASE64Encoder의 java.lang.NoClassDefFoundError와 BASE64Encoder.class가 rt.jar, 즉 JRE 시스템 라이브러리의 일부에 있음을 알 수 있습니다.

+0

예. rt.jar 파일이 클래스 경로에 있습니다. – Sajirupee

+0

그냥 닫기 프로젝트를 수행하고 프로젝트를 열고 프로젝트를 다시 빌드하십시오. – Sandy

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

당신은 Base64 encoding.에 대한 sun.misc.BASE64Encoder를 사용하고 그리고 그것은 때마다 응용 프로그램 실행을 찾을 수 없습니다.

  1. 계속 사용하려면 다음을 시도하십시오. 당신은 단지 Base64 인코딩에 관심이 2.If

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

당신은 Base64 인코딩 android.util.Base64을 시도 할 수 있습니다.

관련 문제