IntelliJ - 使用 getResource() 找不到资源,出现 nullPointerException

问题描述 投票:0回答:2

本质上,我正在使用(或尝试使用)Freemarker,这需要我使用

为模板设置一个文件夹
cfg.setDirectoryForTemplateLoading(File dir);

我在

/htmltemplates
中创建了一个文件夹
src/main/resources/htmltemplates
。我尝试访问资源的类位于
src/main/java

但是,当我尝试使用

URL url = getClass().getResource("/htmltemplates");
File dir = new File(url.toString());

我收到 nullPointerException。我尝试过ClassLoader的各种组合,尝试使用文件而不是目录(没用,他什么也没找到),在StackOverflow上搜索了一个多小时...... 以前我有一个几乎相同的设置,一切都很顺利,但现在 - 什么都没有。试图找出可能不同的地方却导致了绝对的失败。

我一直在通过 IntelliJ 的构建环境运行该程序,还尝试构建一个

.jar
工件(我之前一直在这样做,没问题),然后通过控制台运行它,没有任何效果。有什么想法为什么会发生这种情况吗?

编辑:这变得越来越奇怪。我已经让工作中的其他人尝试过,我们都同时启动了新的 IntelliJ 项目,对它们进行了相同的设置,但他们无法复制我的问题。到底是什么?

java intellij-idea nullpointerexception resources
2个回答
2
投票

您的代码没问题,但是为了让程序在从 IntelliJ 内启动时找到资源,您首先必须使用 Build/Make project 构建您的项目。此构建步骤将文件从 src/main/resources 复制到类输出目录(target/classes 如果您有 Maven 项目),然后类加载器能够找到它们。


0
投票

您需要设置相对路径而不是绝对路径,就像这样

htmltemplates
不带斜线。

并尝试将任何文件添加到

htmltemplate
文件夹。因为,如果该文件夹为空,IDE 不会在
targe 中创建文件夹 
htmltemplate
© www.soinside.com 2019 - 2024. All rights reserved.