0

我是一个相对的 Java 新手,如果这个问题看起来有点基本,我深表歉意。我在这里搜索了高低的答案,但没有找到任何有帮助的东西。

问题:

虽然我能够从 IDE 环境将外部包集成到我的 Java 程序中,但我正在尝试从命令行运行一个非常基本的程序,该程序调用我编写的单独的基本包文件 - 而且我只是在做这一切都是因为我想对包文件如何与 Java 的主程序相关联有一个自下而上的理解。

我的桌面上有一个名为 MyProgram.java 的程序:

import org.somepackage;

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  }

仍然在桌面上,然后我有另一个文件夹,我命名为src,在其中我创建了与包名称相对应的必要子文件夹,即./src/org/somepackage - 在这个位置,我有 Human .java 文件,它定义了具有以下内容的 Human 类:

package org.somepackage;

public class Human {

    public void scream() {

    System.out.println("I exist!!");

  }

}

然后我再次在桌面上创建了一个类文件夹,并在命令行上运行以下编译命令:

javac -d ./classes/ ./src/org/packagename/Human.java

这运行良好并按预期创建了 ./classes/org/packagename/ 位置中的 Human.class 文件。

但是,我失败的地方是当我尝试在命令行上编译 MyProgram.java 时,即

javac -cp ".:./classes/" MyProgram.java

如您所见,我的类路径包含对 MyProgram.java 文件的当前位置 ( "." ) 的引用,并且它包含对作为基本位置的类文件夹 ( "./classes/" ) 的引用对于 org.somepackage 包,其子文件夹(./classes/org/somepackage/)上可以找到Human.class文件。

在这个阶段,我只是希望 java 引擎将MyProgram.java编译成程序 MyProgram.class - 但是,相反,我得到了一个错误:

MyProgram.java:1:错误:包 org 不存在

我一直按照此处列出的说明进行操作:

https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html

而且我似乎没有偏离说明 - 但是我无法在 Stackoverflow 或其他任何地方找到关于此编译失败的可能原因的解释。如果有人有想法,我们将非常感谢您的帮助。

谢谢,

4

1 回答 1

1

你的错误在这里

import org.somepackage; <--

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  }

你实际上忘了导入类,你需要写这个名字 import org.somepackage.Human;导入所有包内容import org.somepackage.*;或在你的代码中写类的完整限定名

org.somepackage.Human myHuman = new org.somepackage.Human(); 
myHuman.scream();

正确错误:

import org.somepackage.Human;

public class MyProgram {

    public static void main(String arguments[]) {

    System.out.println("Programme up and running...");
    Human myHuman = new Human(); 
    myHuman.scream();

  } 

之后通过这个命令编译你的 Human.java:

javac -d classes Human.java

和 MyProgram.java

javac -d classes -cp "classes" MyProgram.java

并运行 MyProgram

java -cp "classes" MyProgram
于 2017-07-01T22:30:08.030 回答