Java:包不存在。

3

我在目录: E:\stuff\Java>

我创建了一个A的package:

package pack;

public class A
{
    public void methodA(){
        System.out.println("MethodA");
    }
}

为了编译,我使用了以下语句:

javac -d . A.java

所以创建了一个名为pack的文件夹,其中包含A.class。然后我试图在另一个程序中导入这个包:

import pack.A;

    class B
    {
        public static void main(String[] args){
            A a = new A();
            a.methodA();
        }
    }

当我尝试编译这段代码时:

javac B.java

I get the following error:

   B.java:1: error: package pack does not exist
import pack.A;
           ^
B.java:6: error: cannot find symbol
                A a = new A();
                ^
  symbol:   class A
  location: class B
B.java:6: error: cannot find symbol
                A a = new A();
                          ^
  symbol:   class A
  location: class B
3 errors

我不明白为什么这段代码无法运行。我的B.java文件和pack在同一个文件夹中。

请有人解释一下这段代码的错误吗?


3
编译B时将pack.A添加到类路径中。 - Mena
我在我的电脑上尝试了这个,一切都编译得很好。你确定B.javapack在同一个文件夹中,而A.javapack中吗? - Sam Estep
你使用了java -d ./ B.java吗? - NomadMaker
2个回答

6
从您的错误来看,您的“其他程序”B.java不在与'A.java'相同的目录(E:\stuff\Java)中。这意味着当您尝试编译B.java时,编译器不知道在哪里找到类pack.A。要“使A可见”,您必须将pack.A添加到类路径中,并使用以下命令进行编译:
javac -cp ".;<path_to_add>" B.java

在你的情况下,<path_to_add> 应该是 E:\stuff\Java。这将设置你的类路径不仅为当前目录(.),还包括你的 pack 包所在的目录。
要运行你的程序,你还需要将 pack.A 加入到你的类路径中:
java -cp ".;<path_to_add>" B

这里再次提醒,<path_to_add> 应该是 E:\stuff\Java

在这里我假设你正在使用Windows系统。在Unix系统中,-cp选项的语法略有不同:-cp ".:<path_to_add>",其中的;被替换为:


我的B.java文件实际上与我的包(pack)在同一个目录下,即E:\stuff\Java。然而,当我尝试了您的方法后,它可以正常工作。非常感谢您解决我的疑惑。您也可以这样写: set classpath=E:\stuff\Java 然后正常运行代码,以获得相同的效果。 - Talluri Raviteja

2
尝试以下命令在 Windows 上编译程序:
 javac -cp "<path of the package folder>" file_name.java

执行该程序的命令:

java -cp "<path of the package folder>" file_name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接