我遇到了一个问题,NoClasDefFoundError被抛出了。这让我很困惑,因为我使用的是接口,而且不应该提供任何类定义。我已经阅读了一些指向Classpath的帖子,但我不认为这是问题所在(尽管我可能错了)。我正在使用NetBeans 6.9.1IDE。
我创建了一个示例设置来重现这个问题。四个项目:接口、对象、定位器和消费者。下面您将找到实现。
在运行时,使用者共同讨论缺少的SomeObject实现,因为它正在接受接口,所以它不应该知道这一点。
线程"main“中的
异常: java.lang.NoClassDefFoundError: objects/SomeObject
我遗漏了什么?
package interfaces;
public interface ISomeInterface { }
package objects;
import interfaces.ISomeInterface;
public class SomeObject implements ISomeInterface{ }
package locator;
import interfaces.ISomeInterface;
import objects.SomeObject;
public class Locator { public static ISomeInterface LocateImplementation() { return new SomeObject(); }}
package consumer;
import interfaces.ISomeInterface;
import locator.Locator;
public class Main { public static void main(String[] args) { ISomeInterface object = Locator.LocateImplementation(); }}发布于 2011-01-25 17:31:25
您可以通过接口获得NoClassDefFoundError异常,就像处理类一样。将异常名中的" class“视为编译类或接口(而不是Java类)生成的.class文件。
这意味着类/接口objects.SomeObject在类路径上不可见。检查该.class文件的位置,并确保它在您的类路径上--如果您确定它在那里,请给我们一些屏幕截图或可能有助于调试问题的东西。
发布于 2011-01-25 17:31:33
将NoClassDefFoundError视为运行时链接问题。JRE加载了一个类(或一个接口),它引用了另一个类(或一个接口),但是找不到那个引用的类。
如果存在打包/类路径问题,使运行时环境无法反映构建时的情况,则这是唯一可能发生的情况。
如果您是从IDE启动这个程序,请确保您没有忽略任何错误,并且无论如何都要启动。有些类不会以这种方式生成。
发布于 2011-01-25 17:50:59
通常,我遇到这些问题不是在缺少类时,而是在静态初始化程序中出现错误时。
尝试在调试器中运行您的代码,并将异常断点设置为在抛出任何异常时中断(无论是否捕获)。我敢打赌,由于某种原因,静态初始化程序中有一个不明确的异常。
https://stackoverflow.com/questions/4796774
复制相似问题