IntelliJ 代码无法识别字体文件,即使它们很明显存在
IntelliJ code not recognizing font files even though it is clear they exist
IntelliJ/Java 无法识别明明存在的文件。这是我的文件系统:
MODULE/resources/a.ttf
MODULE/resources/test.png
MODULE/src/test/Test.java
这是我使用的代码:https://paste.ubuntu.com/p/pQxRXMF3wg/
我的代码的哪一部分不正确,我该如何解决?
我做了什么:
- 将我的目录标记为资源根目录。
- 确保资源确实存在。
- 试过这个:'getClass().getResourceAsStream("/resources/a.ttf");'
请尝试以下步骤:
- 鼠标右键单击资源包(在 IntelliJ 中)-> 将目录标记为 -> 资源根。
- 现在您的文件应该可以通过 "test.png" 而不是 "resources/test.png" 访问了。
希望这会有所帮助。
玩得开心! =)
答案其实很简单,跟@KolyaSh的评论有关。反编译我的 JAR 后,我发现 'resources' 文件夹实际上从未放入 JAR 文件中,因此我的代码首先无法运行。另一个问题是我尝试检索资源 URL 的方式。我尝试了 ClassLoader.getSystemResource()
,尽管我对为什么这不是解决方案进行了更多研究。
解决方案是获取调用 class 的类加载器。我还写了一个读取文件的方法,看起来像这样:
Font.loadFont(getResource("a.ttf"), doubleValue);
/* NOTE: The string argument in the resource is the path of which the
file is located. If your file path is something like
'resources/fonts/a.ttf', please use 'fonts/a.ttf' as the string argument.
*/
public InputStream getResource(String path) {
URL url = this.getClass().getClassLoader().getResource(path);
try {
URLConnection c = url.openConnection();
return c.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
}
为了给出一个直接的答案,我缺少的概念是文件实际上是如何存储在 jar 中的,以及如何访问它。首先,你必须得到 ClassLoader 实例(不要使用它提供的静态方法),打开一个到 URL 路径的连接,得到 InputStream,瞧,你有一个很好的,简单的方法来加载任何来自已编译 JAR 的文件。
再次感谢所有帮助回答这个问题的人!!希望这一切都清楚了。
IntelliJ/Java 无法识别明明存在的文件。这是我的文件系统:
MODULE/resources/a.ttf
MODULE/resources/test.png
MODULE/src/test/Test.java
这是我使用的代码:https://paste.ubuntu.com/p/pQxRXMF3wg/
我的代码的哪一部分不正确,我该如何解决?
我做了什么:
- 将我的目录标记为资源根目录。
- 确保资源确实存在。
- 试过这个:'getClass().getResourceAsStream("/resources/a.ttf");'
请尝试以下步骤:
- 鼠标右键单击资源包(在 IntelliJ 中)-> 将目录标记为 -> 资源根。
- 现在您的文件应该可以通过 "test.png" 而不是 "resources/test.png" 访问了。
希望这会有所帮助。
玩得开心! =)
答案其实很简单,跟@KolyaSh的评论有关。反编译我的 JAR 后,我发现 'resources' 文件夹实际上从未放入 JAR 文件中,因此我的代码首先无法运行。另一个问题是我尝试检索资源 URL 的方式。我尝试了 ClassLoader.getSystemResource()
,尽管我对为什么这不是解决方案进行了更多研究。
解决方案是获取调用 class 的类加载器。我还写了一个读取文件的方法,看起来像这样:
Font.loadFont(getResource("a.ttf"), doubleValue);
/* NOTE: The string argument in the resource is the path of which the
file is located. If your file path is something like
'resources/fonts/a.ttf', please use 'fonts/a.ttf' as the string argument.
*/
public InputStream getResource(String path) {
URL url = this.getClass().getClassLoader().getResource(path);
try {
URLConnection c = url.openConnection();
return c.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
}
为了给出一个直接的答案,我缺少的概念是文件实际上是如何存储在 jar 中的,以及如何访问它。首先,你必须得到 ClassLoader 实例(不要使用它提供的静态方法),打开一个到 URL 路径的连接,得到 InputStream,瞧,你有一个很好的,简单的方法来加载任何来自已编译 JAR 的文件。
再次感谢所有帮助回答这个问题的人!!希望这一切都清楚了。