getResource() 在 Gradle 项目中返回 null
getResource() is returning null with Gradle project
我知道还有其他几个问题...
- Class.getResource() returns null
- Java - class.getResource returns null
- Calling context.getResources() returns null
- getClassLoader().getResource(filepath) returns a null pointer
但我的问题似乎有点不同,因为我似乎拥有所有必要的东西来避免这个问题。
代码:
this.getClass().getResource("checkstyle_whitespace.xml"); // null
问题是我通过检查调试器中的 class 加载程序验证了我的 class 路径。这是我看到的:
27 = {URL@1235} "file:/Users/dennis/Documents/Development/java/java-grader/build/classes/main/"
28 = {URL@1236} "file:/Users/dennis/Documents/Development/java/java-grader/build/resources/main/"
Blow 是我的目录结构的快速 tree
。参见 build/resources
和 src/main/resources
。 gradle 构建我的项目时正在复制文件。
├── build
│ ├── classes
│ │ ├── main
│ │ │ └── javaGrader
│ │ └── test
│ │ └── javaGraderTest
│ └── resources
│ └── main
│ ├── checkstyle_whitespace.xml
│ └── grammars
├── src
│ ├── main
│ │ ├── java
│ │ │ └── javaGrader
│ │ └── resources
│ │ ├── checkstyle_whitespace.xml
│ │ └── grammars
│ └── test
│ ├── java
│ │ └── javaGraderTest
│ └── resources
│ └── mini_test
├── target
│ ├── classes
│ ├── generated-sources
│ │ └── annotations
│ └── generated-test-sources
│ └── test-annotations
└── test_assets
据我了解,这些文件应该可以访问,因为它们在 build
中。如果我错了请纠正我...
如果您将不以 /
开头的资源路径传递给 Class.getResource()
,class 加载程序会在 [=18= 的包中查找资源].不在根。你的代码应该是
this.getClass().getResource("/checkstyle_whitespace.xml")
或
this.getClass().getClassLoader().getResource("checkstyle_whitespace.xml")
在项目主文件夹中 java 文件夹所在的同一位置创建一个名为 "resources" 的文件夹。并将所有图像和其他资源定位到 "resources" 文件夹中。得到这样的
new ImageIcon(getClass().getClassLoader().getResource("image.png"));
我知道还有其他几个问题...
- Class.getResource() returns null
- Java - class.getResource returns null
- Calling context.getResources() returns null
- getClassLoader().getResource(filepath) returns a null pointer
但我的问题似乎有点不同,因为我似乎拥有所有必要的东西来避免这个问题。
代码:
this.getClass().getResource("checkstyle_whitespace.xml"); // null
问题是我通过检查调试器中的 class 加载程序验证了我的 class 路径。这是我看到的:
27 = {URL@1235} "file:/Users/dennis/Documents/Development/java/java-grader/build/classes/main/"
28 = {URL@1236} "file:/Users/dennis/Documents/Development/java/java-grader/build/resources/main/"
Blow 是我的目录结构的快速 tree
。参见 build/resources
和 src/main/resources
。 gradle 构建我的项目时正在复制文件。
├── build
│ ├── classes
│ │ ├── main
│ │ │ └── javaGrader
│ │ └── test
│ │ └── javaGraderTest
│ └── resources
│ └── main
│ ├── checkstyle_whitespace.xml
│ └── grammars
├── src
│ ├── main
│ │ ├── java
│ │ │ └── javaGrader
│ │ └── resources
│ │ ├── checkstyle_whitespace.xml
│ │ └── grammars
│ └── test
│ ├── java
│ │ └── javaGraderTest
│ └── resources
│ └── mini_test
├── target
│ ├── classes
│ ├── generated-sources
│ │ └── annotations
│ └── generated-test-sources
│ └── test-annotations
└── test_assets
据我了解,这些文件应该可以访问,因为它们在 build
中。如果我错了请纠正我...
如果您将不以 /
开头的资源路径传递给 Class.getResource()
,class 加载程序会在 [=18= 的包中查找资源].不在根。你的代码应该是
this.getClass().getResource("/checkstyle_whitespace.xml")
或
this.getClass().getClassLoader().getResource("checkstyle_whitespace.xml")
在项目主文件夹中 java 文件夹所在的同一位置创建一个名为 "resources" 的文件夹。并将所有图像和其他资源定位到 "resources" 文件夹中。得到这样的
new ImageIcon(getClass().getClassLoader().getResource("image.png"));