【问题标题】:android - Unable to instantiate activity - ClassNotFound - Fails on one eclipse but not otherandroid - 无法实例化活动 - ClassNotFound - 在一次日食上失败,但在其他日食上失败
【发布时间】:2012-04-21 21:41:38
【问题描述】:

我在尝试加载程序时收到“无法实例化活动”错误。让我感到困惑的一件事是完全相同的代码在我的旧 PC 上运行。我刚刚用新的 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'?

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

Android 清单

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

【问题讨论】:

  • 告诉我们更多关于您的两台 PC 设置的信息:1) 他们使用相同版本的 andriod sdk 吗? 2) 您是否确定其他一些 Android 项目可以在您的新机器上正常运行? 3)它只是普通的andriod项目还是取决于你的Android库项目? 4)它是否依赖于第 3 方库,它们在两台机器上是否相同? 5) 还要确保两台机器上的所有版本都相同:32 位或 64 位发行版。
  • 它当前工作的机器运行的是旧版本的 eclipse 和 ADT(15.00) 。一旦我在旧机器上将 eclipse 和 ADT 更新到最新版本,它现在在两台机器上都不起作用。我能够在两台机器上运行一个非常简单的测试程序,但不是我的实际项目。一台机器是 64 位的,另一台是 32 位的。但考虑到它们现在都不起作用,我相信这是因为 Eclipse 或 ADT 的更新。虽然我不确定那会是什么。
  • 我刚刚运行了一个测试,其中我删除了 manifest.xml 中的所有内容并将其替换为非常简单的工作项目,并将其指向一个愚蠢的活动,它仍然给出了这个错误。是否有一些配置不好的地方?我试过重建 .project 和 .classpath
  • 好吧,一个建议是一点一点地启动和构建您的应用程序,并尝试查看导致问题的原因。希望它不是那么复杂,也不会花你那么长时间......
  • 这正是我所做的,一块一块地构建。没有改变我能说的任何东西并且它起作用了。所以也许这与使用旧的 ADT 和 Eclipse 并将其引入新的有关。无论哪种方式,它现在都运行良好。感谢大家的帮助。

标签: java android eclipse manifest classnotfoundexception


【解决方案1】:

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

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

  • 在“Project Explorer”中的项目上单击鼠标右键,然后选择“Properties”
  • 在左侧列表中选择“Java Build Path”。
  • 点击“订购和导出”选项卡。
  • 分别选中“Android Private Libraries”和“Android Dependencies”两个复选框,然后单击“确定”按钮。
  • 清理项目并运行。

【讨论】:

  • 我遇到了同样的问题,这对我有用。仍然好奇自 2 天前发生了什么变化,但现在已修复,所以我很高兴。
  • 是的,已确认。这是比到处乱用类加载器的代码更优雅的解决方案
【解决方案2】:

试试这个。将这段代码添加到您的 PopActivity 中,并从其默认构造函数中调用此函数。

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

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

【讨论】:

  • 所以我添加了这个,public PopActivity() { fixClassLoaderIssue(); } 似乎没有解决问题?
  • 嗯..应该修复它。您可以尝试通过在其中添加日志语句来确保您的构造函数是否被调用?它很可能会被调用,但只是为了确保。
  • 我在 fixClassLoaderIssue() 之前添加了日志,但它不显示日志。 Stack 说它是由 ClassNotFoundException 引起的,所以该类实际上从未被调用过?
  • 这很奇怪。您是否尝试清理项目并重建它?转到项目菜单选项并选择“清理”。
  • 只有大约 100 次,:) 这段代码在我的另一台机器上运行良好,这是一个已发布的应用程序,可以在每台设备上运行良好。只是我构建的这个新组合给了我这个错误。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    
        *package="com.app"*
        android:versionCode="1"
        android:versionName="1.0" >
    

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 2010-12-29
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多