【问题标题】:NoClassDefFoundException in a provided .class file [closed]提供的 .class 文件中的 NoClassDefFoundException [关闭]
【发布时间】:2016-02-27 20:28:00
【问题描述】:

我正在尝试使用提供给我的学校作业的一些文件在 Eclipse 中构建一个项目(我有足够的时间在到期之前)。我遇到了一个奇怪的问题,我还没有找到答案。该项目是两个 AI 玩家之间进行的游戏。弓箭手被敌人控制。弓箭手的代码以 .class 文件的形式出现,我没有任何其他源代码。在弓箭手尝试移动之前,一切似乎都运行良好,然后会发生这种情况:

Exception in thread "Thread-5" java.lang.NoClassDefFoundError: ArcherAgent$1
at ArcherAgent.isFourDir(ArcherAgent.java:332)
at ArcherAgent.bestToMove(ArcherAgent.java:246)
at ArcherAgent.makeDecision(ArcherAgent.java:218)
at ArcherAgent.middleStep(ArcherAgent.java:150)
at edu.cwru.sepia.agent.ThreadIntermediary.run(ThreadIntermediary.java:140)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: ArcherAgent$1

$1 向我表明它正在寻找一个内部类。我尝试将文件放在不同的位置但无济于事,当我注意到 $1 时,我还尝试在 Eclipse 中使用 clean 和 build。还有其他方法可以解决这个问题吗?我不完全确定如何处理它似乎缺少内部类的事实,我现在一直在四处寻找,但我认为我还没有找到任何东西。

如有任何麻烦,我很抱歉。

【问题讨论】:

  • 每个类都有自己的 .class 文件。你只有一个吗?
  • 请出示您的代码

标签: java eclipse exception artificial-intelligence inner-classes


【解决方案1】:

你是对的,缺少的类是一个内部类。该类位于编译器生成的另一个文件中。当你没有像这样命名的文件时,它会丢失,所以你必须获取外部类的源代码或在其他地方找到丢失的编译内部类。

【讨论】:

  • 完全正确。稍微扩展一下,ArcherAgent$1 类是一个匿名内部类。这些类由如下代码创建:new ActionListener() { public void actionPerformed(ActionEvent e) { // Do something } };。您要查找的类文件名为 ArcherAgent$1.class。
  • 向我解释清楚。您有源代码,并且在构建文件夹中存在类文件吗?
  • 果然如你所说。我错过了编译的内部类,事实证明它也提供了。
【解决方案2】:

查看 ArcherAgent 类的导入块。我确定您会错过一些使用 ArcherAgent 类的库。 NoClassDefFoundError 表示导入块中的类不在类路径中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2011-01-19
    • 2013-03-23
    相关资源
    最近更新 更多