0

我编写了一个 Java 类,它实现了在另一个目录中指定的接口。我像这样编译应用程序:

javac ArrayQueue.java -cp QueueArray

该类ArrayQueue实现了Queue目录中的接口QueueArray。如果没有指定的类路径,编译器将按预期抛出错误。

但是,之后运行程序时,它再也找不到类了:

java ArrayQueue -cp QueueArray
Exception in thread "main" java.lang.NoClassDefFoundError: Queue

这可能是什么原因造成的?

编辑:如果我将.class文件复制到与ArrayQueue.class.

4

2 回答 2

1

这可能会有所帮助。来自JLS,第 3 版

Java 平台的实现必须支持至少一个未命名的包;它可能支持多个未命名的包,但不是必须这样做。每个未命名的包中有哪些编译单元由主机系统决定

在使用分层文件系统存储包的 Java 平台实现中,一种典型的策略是将未命名的包与每个目录相关联。一次只能观察到一个未命名的包,即与“当前工作目录”相关联的包。“当前工作目录”的确切含义取决于主机系统。

您使用的 JVM 似乎不支持默认包,除非它们与当前目录关联,也就是您从中启动自定义队列类的目录。

一般来说,使用默认包是个坏主意,我的建议是将两个类与一个包相关联,重新编译并重新测试您的代码。

于 2013-03-11T10:19:57.760 回答
0

采用java -classpath . class_having_main_method

于 2013-03-11T09:59:28.743 回答