android - 无法实例化活动 - ClassNotFound - 在一次日食上失败但在其他情况下失败

时间:2012-04-21 21:41:38

标签: java android eclipse manifest classnotfoundexception

我在尝试加载程序时收到“无法实例化活动”错误。让我感到困惑的一件事就是在我的旧电脑上使用完全相同的代码。我刚刚用新的eclipse / android SDK /等构建了一个新的。我有两台机器运行相同的代码,一个工作正常,另一个给出了这个错误。

有什么想法吗?

编辑: 我在堆栈中注意到的一件事是

引起:java.lang.ClassNotFoundException:com.voldaran.puzzle.graBLOX.PopActivity in loader dalvik.system.PathClassLoader [/data/app/com.voldaran.puzzle.graBLOX-2.apk]

它列出了graBLOX-2.apk。为什么使用'-2.apk'?

当我在工作机器上手动重现此错误时,它不会显示最后[]'d部分。

Android Manifest

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".PopActivity"
              android:label="@string/app_name"
              android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
              android:finishOnTaskLaunch="true"
              android:configChanges="orientation|keyboardHidden"
              android:screenOrientation="portrait"
              >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

堆栈

 04-21 17:33:42.284: E/AndroidRuntime(4045): FATAL EXCEPTION: main
04-21 17:33:42.284: E/AndroidRuntime(4045): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.voldaran.puzzle.graBLOX/com.voldaran.puzzle.graBLOX.PopActivity}: java.lang.ClassNotFoundException: com.voldaran.puzzle.graBLOX.PopActivity in loader dalvik.system.PathClassLoader[/data/app/com.voldaran.puzzle.graBLOX-2.apk]
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.os.Looper.loop(Looper.java:130)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.main(ActivityThread.java:3683)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.reflect.Method.invokeNative(Native Method)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.reflect.Method.invoke(Method.java:507)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at dalvik.system.NativeStart.main(Native Method)
04-21 17:33:42.284: E/AndroidRuntime(4045): Caused by: java.lang.ClassNotFoundException: com.voldaran.puzzle.graBLOX.PopActivity in loader dalvik.system.PathClassLoader[/data/app/com.voldaran.puzzle.graBLOX-2.apk]
04-21 17:33:42.284: E/AndroidRuntime(4045):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)

4 个答案:

答案 0 :(得分:8)

我发生了几乎相同的情况(最初在32位机器上制作的项目,然后在另一台64位机器中导入)。

在Eclipse Juno(64位)下的Android项目中:

  • 在“Project Explorer”中单击项目上的鼠标右键,然后选择“属性”
  • 在左侧列表中选择“Java Build Path”。
  • 点击“订购和导出”标签。
  • 分别标记“Android私有库”和“Android依赖项”的两个复选框,然后单击“确定”按钮。
  • 清理项目并运行。

答案 1 :(得分:2)

试试这个。在PopActivity中添加这段代码,并在其默认构造函数中调用此函数。

private static void fixClassLoaderIssue()
{
ClassLoader myClassLoader = MyClass.class.getClassLoader();
Thread.currentThread().setContextClassLoader(myClassLoader);
}  

我有一个类似的问题,这解决了它。现在这个解决方案并没有真正解决问题存在的原因,但我真的无法找到答案 参考检查this回答。

答案 2 :(得分:0)

您是否尝试过干净的项目?这通常可以解决我的类加载器问题。

答案 3 :(得分:0)

在我的情况下,AndroidManifest文件中的包名错误。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    *package="com.app"*
    android:versionCode="1"
    android:versionName="1.0" >