Tutorial :android force close: ClassNotFoundException for Activity class



Question:

When I start my (soon-to-be) android game (from eclipse) it opens, but immediately force-closes.

Logcat says:

07-09 17:12:35.709: ERROR/AndroidRuntime(3866): Uncaught handler: thread main exiting due to uncaught exception  07-09 17:12:35.719: ERROR/AndroidRuntime(3866): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.anselm.eickhoff.rhythm/org.anselm.eickhoff.rhythm.RhythmGameActivity}: java.lang.ClassNotFoundException: org.anselm.eickhoff.rhythm.RhythmGameActivity in loader dalvik.system.PathClassLoader@4001e740  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2497)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.access$2200(ActivityThread.java:126)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.os.Handler.dispatchMessage(Handler.java:99)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.os.Looper.loop(Looper.java:123)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.main(ActivityThread.java:4595)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.reflect.Method.invokeNative(Native Method)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.reflect.Method.invoke(Method.java:521)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at dalvik.system.NativeStart.main(Native Method)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866): Caused by: java.lang.ClassNotFoundException: org.anselm.eickhoff.rhythm.RhythmGameActivity in loader dalvik.system.PathClassLoader@4001e740  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2489)  07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     ... 11 more  

the interesting line here is (I think):

07-09 17:12:35.719: ERROR/AndroidRuntime(3866): Caused by: java.lang.ClassNotFoundException: org.anselm.eickhoff.rhythm.RhythmGameActivity in loader dalvik.system.PathClassLoader@4001e740  

Which surprises me, because I have this class (in the right package)

edit: to clarify, added the first line which I had omitted (together with the imports)

package org.anselm.eickhoff.rhythm;  ...  public class RhythmGameActivity extends Activity {          /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);        }        @Override      public void onPause() {      }  }  

and that's all it does!

I also registered it in the manifest:

<?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="http://schemas.android.com/apk/res/android"        package="org.anselm.eickhoff.rhythm"        android:versionCode="1" android:versionName="pre-alpha">        <uses-permission android:name="android.permission.INTERNET" />      <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" android:hasCode="false">        <activity android:name=".RhythmGameActivity">          <intent-filter>              <action android:name="android.intent.action.MAIN" />              <category android:name="android.intent.category.LAUNCHER" />          </intent-filter>      </activity>      </application>    </manifest>   

edit: this all has started since I renamed the activity from RhythmGame to RhythmGameActivity, but I am pretty sure I replaced all the references so maybe it is still wrongly chached somewhere? (I tried refreshing and cleaning the project)

Your help is really appreciated - im stuck!


Solution:1

I use Perforce with Eclipse and have discovered that Perforce's default behavior of making all files under source control read-only causes build problems that aren't clearly specified in Eclipse's build window. Also, there seems to be a quirk for me when adding a library project where even if the .classpath and .project file are writable the library may not properly associate itself with the project. I generally follow these steps for resolving errors of this nature (this assumes that the project's manifest is correct):

1) Close Eclipse. Eclipse may cache some info about a file's R/W status.

2) (Broad stroke) Make all of the files in the project writable either by checking them out from source control, or through the OS. .classpath and .project at the bare minimum should be writable.

2.5) If you placed files under source control that are generated during the build process and are a normal part of the Android build process then they should be removed from source control and made writable. Including but not limited to .class and files in the bin and gen directories.

3) Open the project in Eclipse. If there are no errors the problem may be fixed.

4) Examine the project explorer and look specifically for library project dependencies that may be missing. In my experience it's important to see all lib projects' directories and their library status icon in your project's explorer hierarchy. If a lib project folder and icon is missing, go to Properties->Android and select and add the missing lib(s). After adding a lib select "Apply" an watch the project explorer to make sure that the lib icon appears in the project directory. This step explanation may seem overly detailed, but I've been bitten several times before forcing myself to be extra observant here. If a lib won't add, try adding other dummy lib project and removing them in combination with the lib you want. No joke - this is sometimes necessary for me.

5) Clean all of the projects.

6) Read the error list and resolve any other errors.

7) Fix all of the warnings you've been putting off fixing.

8) (Not essential but important) Revert all unchanged files and observe what's left in you changelist - these are the files that will need your attention in the future to prevent build problems.


Solution:2

Just had the same problem. After updating ADT to the newest version, my

lib
folder was no longer recognized. Had to rename it to
libs
Now: do they really have to release new SDK every 5 minutes? Can't they create ONE stable environment for some longer time?


Solution:3

I had this problem once when my working application suddenly started throwing ClassNotFoundException. The problem was that the classes were not being compiled and translated to the "dex" file, this is obvious to find because the APK just shrinks.

So, in eclipse, in order to fix it just add the javabuilder to your .project file.

<buildCommand>    <name>org.eclipse.jdt.core.javabuilder</name>    <arguments>    </arguments>  </buildCommand>  

Hope it helps.


Solution:4

Try to fix .classpath.

Had the same problem caused by corrupt .classpath file. After fixing it the ClassNotFoundException was gone.

The background is that we are using SVN, an update caused a conflict in .classpath. Eclipse, however, did not show any error message or hint about that. I only found out when I tried to submit the current changes.

The solution here was to do a fresh SVN check out of the project, so a working version of .classpath was restored.


Solution:5

Not really a solution but this fixed it:

creating a new project from scratch and migrating the code

Please close this if something like it is possible here.

Thanks for all your ideas and thoughts!


Solution:6

Just had this same problem. Was going nuts. Fully restarted emulator/adb/and eclipse and it fixed it. Strange stuff...


Solution:7

Did you rename in Eclipse. Double check that it renamed with sub-package correctly. In my case it removed the dot:

Wrong: ui.MyActivity

Fix: .ui.MyActivity


Solution:8

I had the same problem and in my case, I had forgot to put a library in the Android Manifest. I had a MapView Activity and I had forgot to put :

<uses-library android:name="com.google.android.maps"/>.  

So, you should make sure you have all your library included in your manifest.


Solution:9

I got this error in a FragmentActivity after updating the SDK to Android 4. The reason was, that you no longer need to include the android-support-v4.jar. Just add the support tools by clicking right mouse button on your Project, than Android Tools -> Add support library.


Solution:10

I know it's not your problem , but I had exactly the same problem. Suddenly my app stopped working. I didint make any change to manifest, but with some accident there was missing first row:

<?xml version="1.0" encoding="utf-8"?>

This caused ClassNotFoundException for launcher activity. I was struggling with that for few hours and I overlooked this every time I was checking manifest for possible mistake.

Strange thing happened after I have deleted this row again. Suprise, suprise app was still working. (and I didnt forget to rebuild app)

Hope this help someone to save few hours.


Solution:11

Perhaps your run configuration refers to the old name. Click on the little triangle next to the green run button, and select Run Configurations. Make sure the one for this project refers to the right activity name. Or just delete it and Eclipse will automatically make you a new one.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »