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

时间:2015-08-12 10:47:31

标签: java windows package classpath

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

Dummy0:

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

Dummy1:

package de.train;

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

这是我的输出。一切都编好了。但我不能运行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[]);
}

我在这个项目的窗口下。这是一些安全限制吗?如何删除它?

2 个答案:

答案 0 :(得分:2)

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

选项:

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

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

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

答案 1 :(得分:0)

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