2010-07-09 32 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的用於發射活動。我幾個小時都在苦苦掙扎,每次我檢查艙單時可能會出現錯誤,所以我忽略了這一點。

奇怪的事情發生後,我又刪除了該行。驚喜,驚喜應用程序仍在工作。 (和我沒有忘記重建應用程序)

希望這有助於有人救幾個小時。