Java IntelliJ代码无法识别字体文件,即使它们明显存在
IntelliJ/Java无法识别明显存在的文件。这是我的文件系统:Java IntelliJ代码无法识别字体文件,即使它们明显存在,java,intellij-idea,javafx,javafx-8,Java,Intellij Idea,Javafx,Javafx 8,IntelliJ/Java无法识别明显存在的文件。这是我的文件系统: MODULE/resources/a.ttf MODULE/resources/test.png MODULE/src/test/Test.java 以下是我正在使用的代码: 我的代码的哪一部分不正确,如何修复它 我所做的: 将我的目录标记为资源根目录 确保资源确实存在 尝试了以下操作:“getClass().getResourceAsStream(“/resources/a.ttf”);” 尝试以下步骤: 右键单击资源包
MODULE/resources/a.ttf
MODULE/resources/test.png
MODULE/src/test/Test.java
以下是我正在使用的代码:
我的代码的哪一部分不正确,如何修复它
我所做的:
- 将我的目录标记为资源根目录
- 确保资源确实存在
- 尝试了以下操作:“getClass().getResourceAsStream(“/resources/a.ttf”);”李>
玩得开心 答案其实很简单,因为它与@kolyah的评论有关。在反编译我的JAR之后,我发现“resources”文件夹实际上从未放入JAR文件中,因此我的代码一开始就不起作用。另一个问题是我试图检索资源URL的方式。我尝试了
ClassLoader.getSystemResource()
,不过我进一步研究了为什么这不是解决方案
解决方案是获取调用类的类加载器。我还编写了一个读取文件的方法,看起来像这样:
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中加载任何文件
再次感谢所有帮助回答这个问题的人!!希望这能澄清一切。我用一些额外的信息编辑了我的帖子,这样我就不会得到我已经得到的答案。我已经将目录标记为资源根目录;或File File=新文件(“a.ttf”);System.out.println(file.exists());-应在consoleQuick问题中打印true!'getClass().getResourceAsStream(“a.ttf”)是否从jar文件中的任何位置访问该文件?因此,如果它位于/resources/fonts/a.ttf中,则使用相同的方法?如果resources文件夹是您的资源根目录(步骤1),您应该请求“fonts/a.ttf”访问/resources/fonts/a.ttf下的文件。在编译到JavaFX应用程序或Jar时,使用file类也可以工作吗?