为什么 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,则必须指定完整的包并执行。
我正在尝试使用包指令编译 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,则必须指定完整的包并执行。