android force close:Activity类的ClassNotFoundException

时间:2010-07-09 15:21:12

标签: 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

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

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

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

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

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

就是这样!

我也在清单中注册了它:

<?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> 

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

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

11 个答案:

答案 0 :(得分:13)

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

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

2)(广泛笔划)通过从源代码管理或通过操作系统检查项目中的所有文件是否可写。 .classpath和.project应该是可写的。

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

3)在Eclipse中打开项目。如果没有错误,问题可能会得到解决。

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

5)清理所有项目。

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

7)修正你一直在修理的所有警告。

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:5)

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

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

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

希望它有所帮助。

答案 3 :(得分:5)

尝试修复.classpath。

由于损坏的.classpath文件导致同样的问题。修复它之后,ClassNotFoundException就消失了。

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

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

答案 4 :(得分:4)

不是真正的解决方案,但这解决了它:

从头开始创建新项目并迁移代码

如果可能的话,请关闭它。

感谢您的所有想法和想法!

答案 5 :(得分:4)

刚遇到同样的问题。疯了。完全重启模拟器/ adb /和eclipse并修复它。奇怪的东西......

答案 6 :(得分:4)

您是否在Eclipse中重命名。仔细检查它是否正确地重命名了子包。在我的情况下,它删除了点:

错误:ui.MyActivity

修复:.ui.MyActivity

答案 7 :(得分:4)

我遇到了同样的问题,在我的情况下,我忘记在Android Manifest中放置一个库。我有一个MapView活动,我忘记了:

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

因此,您应该确保清单中包含所有库。

答案 8 :(得分:1)

在将SDK更新到Android 4后,我在FragmentActivity中出现此错误。原因是,您不再需要包含android-support-v4.jar。只需在项目上单击鼠标右键即可添加支持工具,而不是Android工具 - &gt;添加支持库。

答案 9 :(得分:1)

我知道这不是你的问题,但我有完全相同的问题。突然,我的应用程序停止了工作。我没有对清单进行任何改动,但是出现了一些意外,第一排错过了:

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

这导致启动器活动的ClassNotFoundException。几个小时我一直在努力,每次检查清单时都会忽略这个错误。

在我再次删除此行后发生了奇怪的事情。惊喜,惊喜应用程序仍然在工作。 (我没有忘记重建应用程序)

希望这可以帮助别人节省几个小时。

答案 10 :(得分:-2)

也许您的运行配置引用旧名称。单击绿色运行按钮旁边的小三角形,然后选择“运行配置”。确保此项目的一个引用了正确的活动名称。或者只是删除它,Eclipse将自动为您创建一个新的。