Java:包不存在

问题描述 投票:0回答:3

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

我创建了一个包A:

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

我收到以下错误:

   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 文件和包位于同一文件夹中。

有人可以解释一下这段代码中的错误吗?

java
3个回答
7
投票

从您的错误看来,您的“其他程序”

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>"
,其中
;
已被
:
替换。


2
投票

尝试使用以下命令在 Windows 上编译程序:

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

以及执行程序的命令:

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

0
投票

当我从不同的 vscode 文件夹启动我的应用程序时,我在项目中遇到了相同的错误。

最后发现问题出在VSCode的运行按钮上(右上)。当我在 VSCode 中打开以前未打开过的新文件夹时,它默认设置为“运行代码”而不是“运行 Java”。

© www.soinside.com 2019 - 2024. All rights reserved.