【问题标题】:ClassNotFoundException AndroidClassNotFoundException Android
【发布时间】:2011-03-06 14:57:34
【问题描述】:

所以我今天在编写 Android 程序时遇到了一个问题。我有一个类可以将 XML 字符串转换为 Java 对象(第三方),它在常规 Java 项目中运行良好,但在 Android 上出现这个奇怪的错误:

06-21 22:44:26.402: DEBUG/App(259): java.lang.ClassNotFoundException: com.package.mycode.Class in loader dalvik.system.PathClassLoader@4001b500 06-21 22:44:26.402:调试/应用程序(259):在 dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)

出于显而易见的原因,我隐藏了我的应用程序名称和包,但我想知道是否有人遇到过这样的问题。类在正确的包中,这是我添加的一个库。我之前引用的其他类在那里并且可以制作。抛出ClassNotFoundException 是否还有其他原因?

谢谢, 杰克

【问题讨论】:

  • 不知道是什么意思>_

标签: java android dalvik classnotfoundexception classnotfound


【解决方案1】:
private static void fixClassLoaderIssue()
{
    ClassLoader myClassLoader = MyClass.class.getClassLoader();
    Thread.currentThread().setContextClassLoader(myClassLoader);
}

这是我目前拥有的代码,我相信它可以解决这个问题。 MyClass 只是我项目中的一个类。就像我说的那样,一个同事向我展示了它,但它看起来很简单。

【讨论】:

  • 我在应用程序类的默认构造函数中调用它。
【解决方案2】:

还有其他原因抛出 ClassNotFoundException 吗?

IIRC,如果“com.package.mycode.Class”的静态依赖中的某些其他类无法加载,或者静态初始化时出现问题,也会抛出它。但这些应该显示为嵌套异常...第一次尝试加载类时

【讨论】:

    【解决方案3】:

    Android 没有在普通机器上可用的所有 Java 类。 缺少一些可能导致此错误的类。但这应该已经在编译时显示。查看此list,了解支持哪些类,不支持哪些类。

    我只是在猜测,因为编译器应该会看到丢失的类。

    【讨论】:

    • 我没有任何其他不支持的正在导入或依赖的类。并且尝试加载的文件是我创建的 jar 文件的一部分,因此它可以与其他 jar 文件一起编译。我希望我明白你的意思
    • 你把这个jar文件放在你的android项目的什么地方了?
    【解决方案4】:

    对于 android 应用程序,我会遇到与外部 jar 文件相同的问题。在我的情况下,解决方案是将 jar 从“lib”文件夹移动到 android 默认的“libs”文件夹。

    当 jar 位于 lib 文件夹中(也被添加到构建路径中)时,虽然 Eclipse 中没有构建问题,但应用程序在运行时给出了 ClassNotFoundException。将 jar 移动到“libs”文件夹后,该 jar 开始出现在“Android Dependencies”下,并且应用程序开始正常工作。

    这些是关于同一主题的其他一些讨论。

    Adding a library/JAR to an Eclipse Android project

    Android: What is the folder name of the jar files (LIB or LIBS)?

    How to specify lib folder for JARs when using Android-generated ant build file?

    【讨论】:

      【解决方案5】:

      我在启动 aynctask 时遇到问题。它曾经工作得很好,但后来我添加了

      line = StringEscapeUtils.unescapeHtml4(line);
      

      (它是一个 commons.apache.org 库)到 asynctask,然后出现很多问题。它编译正常,但是当我尝试运行时,它说在我的 asynctask 类上找不到类。但是我点击恢复它一直在异步任务中,然后它死了。

      所以我猜问题是没有正确安装 StringEscapeUtils,但我无法从收到的错误消息中弄清楚这一点。

      【讨论】:

        【解决方案6】:

        还有其他原因抛出 ClassNotFoundException 吗?

        在我的情况下,我在使用 eclipse 构建 apk 时的主要活动出现 ClassNotFoundException,但在使用 maven 构建时没有任何问题。

        问题是我的主要活动是从一个普通的 java 项目“POJO 库”实现一个接口。在 Android 项目>Properties>Java Build Path>Order and Export 中,我必须勾选框以导出“POJO 库”。清理项目后,将该接口包含在apk中的classes.dex中,问题就解决了。

        当我试图理解这个问题时,我被指引到这里,我希望它可以帮助处于同样情况的其他人。

        【讨论】:

          猜你喜欢
          • 2011-06-20
          • 2013-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多