编译跨目录Java类时出现Permission Denied错误求助
Java编译权限错误排查与解决
问题概述
存在两个Java包文件Poligon.java和PersegiPanjang.java,编译后者时提示权限拒绝,已确认目录为全权限但编译失败。
文件路径:
Poligon.java:/Users/username/Desktop/Matkul/smt 4/pbo/prak/pert 3/org/poligonPersegiPanjang.java:/Users/username/Desktop/Matkul/smt 4/pbo/prak/pert 3/org/bangundatar
编译命令及错误信息
mylaptop@MacBook-Pro pert 3 % javac org/poligon/Poligon.java mylaptop@MacBook-Pro pert 3 % javac -cp org/poligon;. org/bangundatar/PersegiPanjang.java error: no source files org/bangundatar/PersegiPanjang.java:1: permission denied: /Applications org/bangundatar/PersegiPanjang.java:2: command not found: 3-inheritance.pdf org/bangundatar/PersegiPanjang.java:3: command not found: 3-inheritance.pdf org/bangundatar/PersegiPanjang.java:4: command not found: 3-inheritance.pdf org/bangundatar/PersegiPanjang.java:5: permission denied: org/ org/bangundatar/PersegiPanjang.java:7: command not found: package org/bangundatar/PersegiPanjang.java:9: command not found: import org/bangundatar/PersegiPanjang.java:11: command not found: public org/bangundatar/PersegiPanjang.java:private:12: not valid in this context: panjang,lebar double=''
代码内容
Poligon.java
package org.poligon; public class Poligon{ protected int jumlahSisi; public int getJumlahSisi(){ return this.jumlahSisi; } }
PersegiPanjang.java
package org.bangundatar; import org.poligon.Poligon; public class PersegiPanjang extends Poligon{ private double panjang,lebar; public PersegiPanjang(double panjang, double lebar, int jumlahSisi){ this.panjang = panjang; this.lebar = lebar; this.jumlahSisi = jumlahSisi; } public double hitungLuas(){ return panjang * lebar; } public void printInfo(){ System.out.println("Bangun Persegi Panjang bersisi "+this.getJumlahSisi()); } }
错误原因
这不是真正的权限问题,是编译命令格式错误导致的混乱:
- macOS/Linux系统中,类路径分隔符是
:,而非Windows的;。使用;会让终端把后续的. org/bangundatar/PersegiPanjang.java拆成单独命令执行,进而把Java代码行当成系统命令,出现一系列无关错误。 - 类路径设置错误:
-cp org/poligon指向了子包路径,正确的类路径应该是根包所在的当前目录(即包含org文件夹的pert 3目录)。
正确编译步骤
- 确认当前工作目录是
/Users/username/Desktop/Matkul/smt 4/pbo/prak/pert 3(命令行提示符pert 3 %已验证)。 - 编译
Poligon.java(原命令正确,可直接使用):
javac org/poligon/Poligon.java
- 编译
PersegiPanjang.java时使用正确的类路径格式:
javac -cp . org/bangundatar/PersegiPanjang.java
如果要一次性编译所有文件,可执行:
javac org/poligon/*.java org/bangundatar/*.java
验证结果
编译完成后,org/poligon和org/bangundatar目录下会生成对应的.class文件,此时即可正常使用这两个类。
内容的提问来源于stack exchange,提问作者furfearz
相关产品推荐
相关产品推荐

