我在目录: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 文件和包位于同一文件夹中。
有人可以解释一下这段代码中的错误吗?
从您的错误看来,您的“其他程序”
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>"
,其中 ;
已被 :
替换。
尝试使用以下命令在 Windows 上编译程序:
javac -cp "<path of the package folder>" file_name.java
以及执行程序的命令:
java -cp "<path of the package folder>" file_name
当我从不同的 vscode 文件夹启动我的应用程序时,我在项目中遇到了相同的错误。
最后发现问题出在VSCode的运行按钮上(右上)。当我在 VSCode 中打开以前未打开过的新文件夹时,它默认设置为“运行代码”而不是“运行 Java”。