【问题标题】:Android ClassNotFoundExceptionAndroid ClassNotFoundException
【发布时间】:2011-06-20 07:28:22
【问题描述】:

我的一个应用程序出现问题,我想知道是否有人可以让我了解可能导致问题的原因。

我得到一个 ClassNotFoundException,下面的重要行是

E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0

现在这个应用程序已经发布了一年多 2 天前,我有两个单独的用户就这个问题与我联系,一个是 HTC wildfire (2.1),一个是三星 Galaxy S (?)。现在我无法在我的设备(2.2 和 1.6)或模拟器(2.1)上重新创建这个问题,也无法真正弄清楚为什么类加载器找不到这个类。我花了一段时间谷歌搜索无济于事,希望有人能指点一下!似乎只有在加载一个活动时,当设置 contentView 时,它会尝试扩展一个名为 GoBoardView 的自定义视图,它扩展了 View 类,这只是做一些简单的画布绘图而不是使用任何第三方库或任何其他会发生包名冲突或任何其他类的类。

请帮忙!以防万一它是一个构建问题,我正在通过 Eclipse 更新我的所有 SDK 和 ADT,因为它是针对 1.6 构建并使用旧的 ADT,但我不知道这是否会有所帮助,只是认为值得一试。任何建议都会非常感谢! (编辑见下文)

E/AndroidRuntime(21982): java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)
E/AndroidRuntime(21982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
E/AndroidRuntime(21982): at android.app.ActivityThread.access$2200(ActivityThread.java:126)
E/AndroidRuntime(21982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
E/AndroidRuntime(21982): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(21982): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(21982): at android.app.ActivityThread.main(ActivityThread.java:4603)
E/AndroidRuntime(21982): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(21982): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(21982): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
E/AndroidRuntime(21982): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
E/AndroidRuntime(21982): at android.app.Activity.setContentView(Activity.java:1629)
E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.java:31)
E/AndroidRuntime(21982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
E/AndroidRuntime(21982): ... 11 more
E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0
E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
E/AndroidRuntime(21982): at android.view.LayoutInflater.createView(LayoutInflater.java:466)
E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
E/AndroidRuntime(21982): ... 22 more

编辑

好的,研究用户在回复此问题时评论的一些链接,似乎使用错误的上下文加载活动会导致此问题。我发现这很有趣,因为在我收到的 两个 日志报告中的 一个

之前有此异常
W/ActivityManager( 1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games }

这是非常不言自明的 - 问题是我不知道这个活动可以从它使用非活动上下文的地方开始,所以我有点难过,认为它可能是一些像怪癖这样的多任务处理并且它被带回来进入某事的前景。这显然会导致类加载器出现问题。如果这是在用户手机上发生的,我不明白为什么我不能重现这个(大多数其他用户也不能)。

我通过链接发现的另一件有趣的事情是,有些人由于“不正确的 apk 安装”而遇到问题,可以通过重新安装来解决,我已询问有问题的用户尝试(这没有什么区别)。而且似乎一旦遇到问题(第一次使用)它就会持续存在。

【问题讨论】:

  • 你有一个带有意图过滤器 Intent.FLAG_ACTIVITY_NEW_TASK 的广播接收器吗?这可能是可能尝试启动您的一项活动的非活动上下文。

标签: java android classnotfoundexception


【解决方案1】:

对我来说,问题是一个小的 Caps-Fault。 我查了好几个小时的代码,一切都很好。 有一段时间,我查看了我的 .xml 文件 - 就在那里:

在 java-Files 中,我使用了 ViewPager,在一个讨厌的 xml 文件中,我丢失了大写字母并错误地键入了 viewPager。很明显,这个是找不到的……

【讨论】:

    【解决方案2】:

    我的经验可能是更新了android sdk,需要刷新支持库的链接。只需转到项目设置> android 并再次指向支持库。

    【讨论】:

      【解决方案3】:

      我有同样的问题。最后的问题只是缺少布局 xml 中的表格。

      之前:

          <org.osmdroid.views.MapView
          android:id="@+id/mapview"
          android:layout_width="fill_parent" 
          android:layout_height="0dip"
          tilesource="MapquestOSM" 
          android:layout_weight="1"
          />
      

      然后随着缩进,classNotFoundException 再也没有出现,并且地图正确显示:

          <org.osmdroid.views.MapView
              android:id="@+id/mapview"
              android:layout_width="fill_parent" 
              android:layout_height="0dip"
              tilesource="MapquestOSM" 
              android:layout_weight="1"
          />
      

      【讨论】:

      • 也许你真的需要重建你的项目,我敢打赌缩进无关^^
      【解决方案4】:

      还有另一件事会导致“ClassNotFoundException”。前段时间,android项目开始使用libs目录进行依赖。如果 jar 在 libs 目录中,它会自动在类路径中,因此您不必在项目设置中添加它。但是,“libs”中的 jar 不能附加源(这很荒谬)。因此,如果要附加源,请将 jar 从“libs”移动到“lib”,然后将其添加到类路径中。您可以附加源。但是我已经多次看到这会在我的课程中触发 ClassNotFoundExceptions。将罐子移回即可解决问题。

      【讨论】:

        【解决方案5】:

        这是由于新版本的 eclipse ...从 buildpath 中删除所有外部依赖项并使用 project->properties->builspath->libraries 选项卡再次添加它。现在添加回所有依赖库并通过在 project->properties->builspath- 上的 order 和 project 选项卡上单击它们来选择所有组件。这会很好用!

        【讨论】:

          【解决方案6】:

          我在开发时有时会遇到这个问题——通常是在更改包名称之后。快速清理项目为我解决了这个问题。

          【讨论】:

            【解决方案7】:

            我添加了一个自定义布局并在仅在签名的应用程序包上开始看到 ClassNotFoundException 消息,但开发构建工作得很好。我正在使用 ProGuard,我添加的新布局未包含在 ProGuard 配置的“排除”列表中。我在 ProGuard 排除列表中包含了自定义布局,这为我解决了这个问题。

            【讨论】:

              【解决方案8】:

              我不禁注意到您的 Activity 名称是 couk.doridori.goigoFull.Board,但您缺少的自定义 View 类是 couk.doridori.goigo.customUI.GoBoardView ...看起来您可能有两个不同的包(goigo 与 goigoFull)。

              你有没有机会在图书馆项目上做一些聪明的事情?您需要非常小心代码和布局 xml 中的完全限定类名...

              (如果没有,请添加有关您的项目设置的更多信息,并粘贴您的 layoutinflater 阻塞的布局 XML)

              【讨论】:

              • 啊太棒了,我没有注意到这一点 - 我会调查一下并尽快报告,谢谢...
              • 是的,这就是问题所在,我忽略了这一点,因为我有一个用于小屏幕的单独布局文件,我在其中没有更新包名称 - 这是多么愚蠢的事情 :) 我显然必须等待 23 小时才能授予您赏金,所以会这样做。再次,我应该更彻底地阅读堆栈!
              • 嗨@Dori,很高兴能够提供帮助。对于它的价值,我以前犯过非常类似的错误。如果资源编译器能够捕获对不存在的包的引用并将它们作为错误引发,那肯定会有所帮助......
              • 谢谢先生,我也遇到了同样的问题,那也是因为拼写错误,谢谢 :)
              • 不得不说谢谢,我也遇到过这种蠢事。我没有仔细阅读异常。
              【解决方案9】:

              我已经在这里讨论过这个问题:Android: Unable to instantiate activity / ClassNotFoundException,但我们找不到明确的答案......但是 John J Smith 关于正确使用 Context 的回答很有趣。

              也有人在this thread上解决了他们的问题并给出了一些想法。

              希望这会有所帮助...

              (顺便说一句,我很高兴见到另一个围棋程序员!)

              【讨论】:

              • 我不确定这是否是同一个问题,因为此异常似乎指向其中一个 XML 文件中的特定行 (14)。
              • 是的你是对的,我没看到...不过有一些共同点:同一个Exception,他无法重现错误,而且似乎是随机发生的.
              • 您好,感谢您提供的链接和答案——我已经更新了我的帖子,在底部添加了更多信息/想法。 :)
              • 另外,您提供的链接似乎在所有用户的应用程序启动中,随后的其他链接似乎在谈论从通知中重新启动应用程序(我的应用程序没有通知),如此相似,但我的应用程序确实启动了,所以我觉得我不能排除与 SD 卡相关的错误。顺便说一句,你在做什么?
              猜你喜欢
              • 2011-03-06
              • 2013-07-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-01-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多