getResource() is returning null with Gradle project

你。 提交于 2019-12-06 20:09:37

问题


I'm aware there are several other questions regarding this...

  • Class.getResource() returns null
  • Java - class.getResource returns null
  • Calling context.getResources() returns null
  • getClassLoader().getResource(filepath) returns a null pointer

But my problems seems to be a bit different because I seem to have all of the necessary things to NOT have this problem.

The code:

 this.getClass().getResource("checkstyle_whitespace.xml"); // null

The issue is that I've verified my classpath by inspecting the class loader in the debugger. Here's what I am seeing:

 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 is a quick tree of my directory structure. See build/resources and src/main/resources. The files are being copied when gradle builds my project.

├── 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

From what I understand, the files should be accessible because they're in build. Correct me if I am wrong...


回答1:


If you pass a resource path that doesn't start with a / to Class.getResource(), the class loader looks for the resource in the package of the class. Not at the root. Your code should be

this.getClass().getResource("/checkstyle_whitespace.xml")

or

this.getClass().getClassLoader().getResource("checkstyle_whitespace.xml")



回答2:


Create a folder called "resources" in the same Location that java folder exist in the main folder of the project. and locate all the images and other resources into the "resources" folder. the get those like this

new ImageIcon(getClass().getClassLoader().getResource("image.png"));


来源:https://stackoverflow.com/questions/35861606/getresource-is-returning-null-with-gradle-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!