0

我正在尝试在Eclipse中使用提供给我的一些学校作业(我有足够的时间在它应有的时间)之前建立一个项目。我遇到了一个奇怪的问题,我还没有找到答案。该项目是两个AI玩家之间玩的游戏。弓箭手由敌人控制。射手的代码以.class文件的形式出现,我没有任何其他源代码。一切似乎都做工精细,直到弓箭手试运行,那么出现这种情况:提供的.class文件中的NoClassDefFoundException

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表示,我认为它是寻找一个内部类。我试过将文件放在不同的位置,我也试过在使用clean和build在Eclipse中时发现$ 1。有其他方法可以解决这个问题吗?我不完全确定如何处理这个事实,即它似乎错过了一个内部课堂,而且我一直在寻找,我认为我还没有发现任何东西。

我很抱歉有任何问题。

+1

每个类都有自己的.class文件。你只有一个? – RealSkeptic

+0

请给出您的代码 – Jens

回答

1

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

+0

是的。为了扩大一点,ArcherAgent $ 1类是一个匿名的内部类。这些类是由这样的代码创建的:'new ActionListener(){public void actionPerformed(ActionEvent e){ // Do something something } };'。您正在查找的类文件称为ArcherAgent $ 1.class。 – iboisver

+0

对我来说很清楚。你有源文件并且在build文件夹中存在类文件? –

+0

原来,这完全如你所说。我错过了编译的内部类,它也被提供。 – Coliwack

0

查看ArcherAgent类的导入块。我相信你会错过一些使用你的ArcherAgent类的lib。 NoClassDefFoundError表示导入块中的类不在classpath中。