首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoClassDefFoundError

NoClassDefFoundError
EN

Stack Overflow用户
提问于 2011-01-25 17:26:01
回答 6查看 2.3K关注 0票数 1

我遇到了一个问题,NoClasDefFoundError被抛出了。这让我很困惑,因为我使用的是接口,而且不应该提供任何类定义。我已经阅读了一些指向Classpath的帖子,但我不认为这是问题所在(尽管我可能错了)。我正在使用NetBeans 6.9.1IDE。

我创建了一个示例设置来重现这个问题。四个项目:接口、对象、定位器和消费者。下面您将找到实现。

在运行时,使用者共同讨论缺少的SomeObject实现,因为它正在接受接口,所以它不应该知道这一点。

线程"main“中的

异常: java.lang.NoClassDefFoundError: objects/SomeObject

我遗漏了什么?

代码语言:javascript
复制
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(); }}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-25 17:31:25

您可以通过接口获得NoClassDefFoundError异常,就像处理类一样。将异常名中的" class“视为编译类或接口(而不是Java类)生成的.class文件。

这意味着类/接口objects.SomeObject在类路径上不可见。检查该.class文件的位置,并确保它在您的类路径上--如果您确定它在那里,请给我们一些屏幕截图或可能有助于调试问题的东西。

票数 6
EN

Stack Overflow用户

发布于 2011-01-25 17:31:33

将NoClassDefFoundError视为运行时链接问题。JRE加载了一个类(或一个接口),它引用了另一个类(或一个接口),但是找不到那个引用的类。

如果存在打包/类路径问题,使运行时环境无法反映构建时的情况,则这是唯一可能发生的情况。

如果您是从IDE启动这个程序,请确保您没有忽略任何错误,并且无论如何都要启动。有些类不会以这种方式生成。

票数 3
EN

Stack Overflow用户

发布于 2011-01-25 17:50:59

通常,我遇到这些问题不是在缺少类时,而是在静态初始化程序中出现错误时。

尝试在调试器中运行您的代码,并将异常断点设置为在抛出任何异常时中断(无论是否捕获)。我敢打赌,由于某种原因,静态初始化程序中有一个不明确的异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4796774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档