java - 无法在java中导入子包
问题描述
有人可以帮我解决这个问题吗?:
我无法导入子包,当我尝试 javac Pixel.java
得到:
Pixel.java:2:错误:包 image.color 不存在。
我也试过import image.*
和import image.color.*;
。
像素.java:
package image;
import image.color.GrayColor;
public class Pixel{
}
GrayColor.java:
package image.color;
public class GrayColor{
}
我的树:
└── image
├── Pixel.java
├── color
├── GrayColor.class
└── GrayColor.java
解决方案
最有可能的是,您不是Pixel.java
从项目的根目录编译,而是从该文件所在的目录中编译它(image/
)。在这种情况下,与您的包声明匹配的目录结构image/color
无法从 获得image/
,因为您没有image/image/color
.
包声明必须与声明它们的目录结构相匹配,相对于根目录,因为它们是相对于项目的根目录查找的。例如,如果您正在编译,A.java
它B.java
在 下定义了一个依赖项(A 导入 B)package a.b;
,那么B.java
将在相应a/b/
的文件夹中a/b/
查找它找不到包/目录a/b/
。
使用时有两种方法可以解决此问题javac
:
- 最好是从根目录编译你的文件。这样,所有包声明都将与根目录相对的目录结构(假设您的包名称正确并且它们与目录名称匹配)匹配;
- 您可以使用
-cp
flag 告诉 Java 编译器在哪里寻找其他来源,以防您不是从项目的根目录编译文件。请注意,在这里,您也应该提供项目根目录的路径,因为当从项目的根目录查找时,类包只会匹配文件夹结构。
推荐阅读
- android - 在运行 Android 10 的小米设备上的 TextInput 中的电子邮件检测崩溃
- python-3.x - 硒python按钮单击不起作用
- c# - 如何通过可以在本机代码上调用的“MethodName”获取.net托管方法指针
- python - Sublime Text 3 完成后不会杀死进程
- c++ - 'CryptQueryObject' 未在此范围内声明
- mysql - MySQL:项目数与选定项目不同
- terminate - 你如何告诉 Dafny 在验证终止时使用引理
- c# - AuthorizationCode 流上的 Swagger UI 身份验证错误
- python - 如何在 Python 的特定行中访问文本文件中的数据?
- java - 我想交换字符串的每隔一个字符