2010-07-09 40 views
16

当我开始我的(即将成为)android游戏(来自eclipse)时,它会打开,但立即强制关闭。android force close:ClassNotFoundException for Activity class

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 [email protected] 
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 [email protected] 
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 [email protected] 

这让我吃惊,因为我有这个类(在合适的包)

编辑:澄清,补充了我省略的第一行(连同进口)

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,但我敢肯定,我更换了所有的引用,所以也许这仍然错在某处? (我试过清爽和清洁项目)

你的帮助真的很感激 - 我卡住了!

+0

这很奇怪...尝试建立 - >清理从Eclipse菜单,并确保你的类文件实际上是在同一个项目作为您的清单,并在src /组织/安塞姆/艾克福/节奏文件夹,对于初学者。 您可以导入并运行Eclipse中随SDK提供的任何示例项目吗? – 2010-07-09 16:07:07

+0

我清理了这个项目,样本工作,这也用于工作,但我将RhythmGame重命名为RhythmGameActivity,并将其打破。 (见更新问题) – 2010-07-09 17:37:06

+0

我有完全相同的问题 – clamp 2010-11-14 22:59:16

回答

13

我使用Perforce公司与Eclipse,并已发现的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)(不重要但很重要)恢复所有未更改的文件并观察更改列表中剩下的内容 - 这些是将来需要您关注以防止构建问题的文件。

+0

这似乎与马丁的答案类似,但你的更彻底,所以我会让它成为公认的答案。 – 2011-07-22 22:10:29

+0

谢谢!我会保持这一点,并添加到它 - 上面应用的编辑。 – jchristof 2011-07-23 16:48:57

-2

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

+0

THX我会尽快1.我的互联网再次工作和2试试这个我已经解决了一个非常恼人的USB连接问题,我的HTC Hero(测试设备)(情况正常,所有f * cked up) – 2010-07-10 21:59:03

+0

尝试在运行配置中特别设置正确的活动,之后删除它并让eclipse创建一个新的。在这两种情况下仍然是相同的错误... – 2010-07-11 10:40:41

4

不是一个真正的解决方案,但这个固定:

从头开始创建一个新的项目和迁移代码

请关闭此,如果是这样就可以在这里。

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

+0

必须有一个“有意义”的解决方案来解决这个问题 – clamp 2010-11-14 23:13:13

+0

我有这个相同的问题。唯一的解决方案是描述。虽然必须这样做,但臭味。似乎真的有一个更好的答案。 – etteyafed 2011-01-20 05:34:20

5

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

因此,在eclipse中,为了解决它,只需将javabuilder添加到.project文件。

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

希望它有帮助。

+0

我无法重现我的错误,但这似乎是同一件事和一个修复程序,所以我会将此作为正确的答案。 – 2011-04-07 22:05:32

+0

约瑟夫的回答+我的评论似乎自动做到这一点,所以我做出了正确的答案,谢谢! – 2011-04-18 17:43:12

+0

男人!你救了我几个小时!从SVN检查我们时,我遇到了同样的问题,新项目没有Java Builder。谢谢。 – 2011-09-12 19:09:54

4

刚刚有这个相同的问题。疯了。完全重新启动模拟器/ adb /和eclipse并修复它。奇怪的东西...

+0

我再次遇到了这个问题,这次修复了这个问题:选择Project,F5,清理所有项目。 – 2011-04-18 17:42:29

+0

花了一个小时,试图找出为什么我的发布版本在启动时崩溃,而我的调试版本运行得很好。最终重新启动Eclipse并重建发布版本,并且所有内容都已修复。我同时感激和愤怒。 – 2012-11-07 13:03:48

5

尝试修复.classpath。

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

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

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

+0

您也可以删除.classpath文件并从头开始重新填充(不要忘记重新启动eclipse)。在我的情况下,这解决了这个问题。 – 2012-04-08 03:19:07

4

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

错误:ui.MyActivity

修复:.ui.MyActivity

4

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

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

所以,你应该确保你的清单中包含所有库。

9

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

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

+0

我不能相信这工作。非常感激! – Den 2012-06-13 02:20:58

+0

这对我来说非常适合。希望事情会保持不变。 – metric152 2012-12-09 05:40:20

1

我更新SDK到Android 4的原因是,你不再需要包括Android的支持,v4.jar后得到的FragmentActivity此错误。只需通过在项目上单击鼠标右键来添加支持工具,而不是通过Android工具 - >添加支持库。

1

我知道这不是你的问题,但我有完全相同的问题。突然我的应用程序停止工作。我didint做任何改变来体现,但也有一些意外出现了丢失的第一行:

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

这导致ClassNotFoundException的用于发射活动。我几个小时都在苦苦挣扎,每次我检查舱单时可能会出现错误,所以我忽略了这一点。

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

希望这有助于有人救几个小时。