-4

我得到了一大块未完成的代码,我的任务是完成它。然而,我的导师告诉我,原始未完成的代码应该运行,但它没有运行。我将它们编译成 .class 文件,但是当我输入“java DirectoryLister Driver GUI”时,我得到了

http://imgur.com/cuN9Ea8

我对 Java 完全陌生,我之前唯一的经验是 C。我已经编译了这三个GUI.java, directoryLister.java, and Driver.java文件

javac GUI.java DirectoryLister.java Driver.java 

现在我在同一个目录中有三个 .class 文件,但是当我这样做时

java DirectoryLister Driver GUI 

我得到上面的错误。帮助!

4

2 回答 2

2

当你运行时java,你必须为它提供一个类来运行,而不是三个。该类将main执行其方法。您必须java从编译类的根目录运行,并且必须使用完全限定的类名(即包括包)。

例如,如果您有一个包含源文件的源文件夹src./a/b/C.java则该类将编译为src/a/b/C.class. 然后,您将确保您在src并运行java a.b.C

于 2013-05-04T03:06:44.800 回答
1

从这些错误看来,这是一个包问题。

首先,您不能java在多个文件上运行,因为 java 会将后者的名称作为命令行参数传递。

其次,在 DirectoryLister.java 的顶部,您应该看到

package directoryLister.template;

这意味着 java 类的完全限定名称directoryLister.template.DirectoryLister. 完全限定名基本上是完整的类名,包括它所在的包。包是文件系统上同一目录中的类的分组。

java的设置方式,可以从任何工作目录编译一个java源文件。但是,java在类文件上运行非常严格:

  • 如果源文件在 foo.bar 包中,则类文件所在的目录必须称为 foo/bar/。
  • java必须从包层次结构的根目录运行。如果类文件位于 myjavafiles/foo/bar/ 中,并且在包 foo.bar 中,则在运行 java 时必须将 myjavafiles 作为当前工作目录。
  • Java 必须传递类的完全限定名称,因为如果两个类位于不同的包中,它们可以具有相同的名称。这意味着您必须运行java directoryLister.template.DirectoryLister或任何包含您的主类的类。
  • 请注意上述语句中的句点,而不是斜线。javac但是,需要斜杠。
  • 请注意,只要其他类文件位于正确的位置,java 就会找到它们,您不必将它们作为参数传递给java.
  • 另请注意,javac没有这些严格的限制,因为java.

有关完全限定名称的更多信息,请参见此处。

于 2013-05-04T03:18:29.857 回答