android force close:Activity类的ClassNotFoundException

Ans*_*off 16 android

当我开始我的(即将成为)Android游戏(来自eclipse)时,它会打开,但会立即强行关闭.

Logcat说:

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
Run Code Online (Sandbox Code Playgroud)

这里有趣的一行是(我认为):

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
Run Code Online (Sandbox Code Playgroud)

这让我感到惊讶,因为我有这个课程(在正确的包中)

编辑:澄清,添加了我省略的第一行(连同导入)

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() {
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是它的全部!

我也在清单中注册了它:

<?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> 
Run Code Online (Sandbox Code Playgroud)

编辑:这一切都已经开始,因为我将活动从RhythmGame重命名为RhythmGameActivity,但我很确定我已经替换了所有的引用,所以也许它仍然被错误地追逐到某个地方?(我尝试刷新和清理项目)

非常感谢你的帮助 - 我卡住了!

jch*_*tof 13

我在Eclipse中使用Perforce,并发现Perforce将源控件下的所有文件设置为只读的默认行为会导致在Eclipse的构建窗口中未明确指定的构建问题.此外,似乎有添加库项目中,即使的.classpath和.project文件是可写的库可能无法与项目本身相关联的时候是一个怪癖我.我通常按​​照这些步骤来解决这种性质的错误(假设项目的清单是正确的):

1)关闭Eclipse.Eclipse可能会缓存有关文件R/W状态的一些信息.

2)(广泛笔划)通过从源代码控制或OS中检出项目,使项目中的所有文件都可写..classpath和.project应该是可写的.

2.5)如果您将文件置于源代码管理之下,这些文件是在构建过程中生成的并且是Android构建过程的正常部分,那么它们应该从源代码控制中删除并使其可写.包括但不限于bin和gen目录中的.class和文件.

3)在Eclipse中打开项目.如果没有错误,则可以修复该问题.

4)检查项目资源管理器并专门查看可能缺少的库项目依赖项.根据我的经验,在项目的资源管理器层次结构中查看所有lib项目的目录及其库状态图标非常重要.如果缺少lib项目文件夹和图标,请转到Properties-> Android并选择并添加缺少的lib.添加lib后,选择"Apply"监视项目资源管理器,以确保lib图标出现在项目目录中.这个步骤解释可能看起来过于详细,但是我已经被咬了好几次才强迫自己在这里做一些额外的观察.如果lib不会添加,请尝试添加其他虚拟lib项目并将其与所需的lib一起删除.不开玩笑 - 这对我来说有时是必要的.

5)清理所有项目.

6)阅读错误列表并解决任何其他错误.

7)修复你一直在推迟修复的所有警告.

8)(不重要但很重要)还原所有未更改的文件并观察更改列表中剩下的内容 - 这些文件将来需要您注意以防止构建问题.


Yar*_*Yar 9

刚遇到同样的问题.将ADT更新到最新版本后,我的

lib
文件夹不再被识别.不得不重命名
libs
现在:他们真的必须每5分钟发布一次新的SDK吗?他们不能长时间创造一个稳定的环境吗?


Kam*_*ran 5

当我的工作应用程序突然开始抛出ClassNotFoundException时,我遇到了这个问题.问题是这些类没有被编译并转换为"dex"文件,这很明显,因为APK只是缩小了.

所以,在eclipse中,为了修复它,只需将javabuilder添加到.project文件中.

<buildCommand>
  <name>org.eclipse.jdt.core.javabuilder</name>
  <arguments>
  </arguments>
</buildCommand>
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


小智 5

尝试修复.classpath.

有同样的问题由损坏的.classpath文件引起.修复它之后,ClassNotFoundException就消失了.

背景是我们正在使用SVN,更新导致.classpath中的冲突.但是,Eclipse没有显示任何错误消息或提示.我只是在尝试提交当前更改时才发现.

这里的解决方案是从项目中执行新的SVN检查,因此恢复了.classpath的工作版本.