Can';t在java中导入子包

Can';t在java中导入子包,java,Java,有人能帮我解决这个问题吗 我无法导入子包,当我尝试javac Pixel.java时,我得到: Pixel.java:2:错误:包image.color不存在 我还尝试了import image.*和import image.color.* Pixel.java: package image; import image.color.GrayColor; public class Pixel{ } GrayColor.java: package image.color; public cl

有人能帮我解决这个问题吗


我无法导入子包,当我尝试
javac Pixel.java
时,我得到:

Pixel.java:2:错误:包image.color不存在

我还尝试了
import image.*
import image.color.*

Pixel.java:

package image;

import image.color.GrayColor;

public class Pixel{
}
GrayColor.java:

package image.color;

public class GrayColor{
}
我的树:
└── 图像

├── Pixel.java

├── 颜色

├── 灰色。类


└── GrayColor.java

很可能不是从项目的根目录编译
Pixel.java
,而是从该文件所在的目录(
image/
)编译。在这种情况下,
image/
中没有与包声明
image/color
匹配的目录结构,因为您没有
image/image/color

包声明必须与声明它们的目录结构相匹配(相对于根目录),因为它们是相对于项目的根目录进行查找的。例如,如果您正在编译
A.java
,它具有在
包A.B下定义的依赖项
B.java
(A导入B)
,则
B.java
将在相应的
a/B/
文件夹中查找,如果您在该文件夹中,从那里
a/B/
不可用,编译器将抱怨,它找不到包/目录
a/B/

使用
javac
时,有两种方法可以解决此问题:

  • 最好是从根目录编译文件。这样,所有包声明都将与根目录相对应的目录结构相匹配(假设包名正确且与目录名匹配)
  • 如果您不是从项目的根目录编译文件,您可以使用
    -cp
    标志告诉Java编译器在哪里查找其他源。请注意,在这里,您还应该提供项目根目录的路径,因为从项目根目录中查找时,类包将仅与文件夹结构匹配

很可能,您不是从项目的根目录编译
Pixel.java
,而是从该文件所在的目录(
image/
)编译它。在这种情况下,
image/
中没有与包声明
image/color
匹配的目录结构,因为您没有
image/image/color

包声明必须与声明它们的目录结构相匹配(相对于根目录),因为它们是相对于项目的根目录进行查找的。例如,如果您正在编译
A.java
,它具有在
包A.B下定义的依赖项
B.java
(A导入B)
,则
B.java
将在相应的
a/B/
文件夹中查找,如果您在该文件夹中,从那里
a/B/
不可用,编译器将抱怨,它找不到包/目录
a/B/

使用
javac
时,有两种方法可以解决此问题:

  • 最好是从根目录编译文件。这样,所有包声明都将与根目录相对应的目录结构相匹配(假设包名正确且与目录名匹配)
  • 如果您不是从项目的根目录编译文件,您可以使用
    -cp
    标志告诉Java编译器在哪里查找其他源。请注意,在这里,您还应该提供项目根目录的路径,因为从项目根目录中查找时,类包将仅与文件夹结构匹配

从image.color.*中删除图像,然后重试
javac Pixel。java
不正确。通常,您可以从父文件夹执行
javac image/Pixel.java
,但也可以执行
javac-cp。。来自
image
文件夹的Pixel.java
。的副本。从image.color.*中删除图像并重试
javac Pixel.java
不正确。通常,您可以从父文件夹执行
javac image/Pixel.java
,但也可以执行
javac-cp。。Pixel.java
来自
图像
文件夹。的副本。