为什么 java 中的 `package` 指令使 class 文件无法 运行?

Why does the `package` instruction in java make the class file impossible to run?

我正在尝试使用包指令编译 java 文件。但是,当将指令添加到最简单的程序存根时,出现错误并且无法再启动程序...怎么了?

虚拟 0:

class Dummy0 {
  public static void main( String[] args ) {
    System.out.println("Hello, world!");
  }
}

虚拟 1:

package de.train;

class Dummy1 {
  public static void main( String[] args ) {
    System.out.println("Hello, world!");
  }
}

这是我的输出。一切都编译得很好。但是我不能 运行 class de.train.Dummy1,虽然它显然在那里。

$ javac Dummy*.java
$ java Dummy0
Hello, world!
$ java Dummy1
Error: Could not find or load main class Dummy1
$ java de.train.Dummy1
Error: Could not find or load main class de.train.Dummy1
$ javap Dummy1.class
Compiled from "Dummy1.java"
class de.train.Dummy1 {
  de.train.Dummy1();
  public static void main(java.lang.String[]);
}

我在这个项目中 windows。这是一些安全限制吗?如何删除它?

它正在寻找 class de.train.Dummy1,这意味着它将在目录 de\train 中寻找名为 Dummy1.class 的文件 - 但该文件将 实际上在当前目录中。

选项:

  • 保留源代码,但让编译器为您生成目录结构:

    > javac -d . Dummy*.java
    > java de.train.Dummy1
    
  • Dummy1.java 移动到 de\train 目录中:

    > javac de\train\Dummy*.java
    > java de.train.Dummy1
    

如果您正在执行没有包的 java 程序,它将尝试在同一个 folder/directory 中找到 classes。包只不过是windows中的目录结构。如果要在其他文件夹中执行 class,则必须指定完整的包并执行。