Java IntelliJ代码无法识别字体文件,即使它们明显存在

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”);” 尝试以下步骤: 右键单击资源包

IntelliJ/Java无法识别明显存在的文件。这是我的文件系统:

MODULE/resources/a.ttf
MODULE/resources/test.png
MODULE/src/test/Test.java
以下是我正在使用的代码:

我的代码的哪一部分不正确,如何修复它

我所做的:
  • 将我的目录标记为资源根目录
  • 确保资源确实存在
  • 尝试了以下操作:“getClass().getResourceAsStream(“/resources/a.ttf”);”
尝试以下步骤:

  • 右键单击资源包(在IntelliJ中)->将目录标记为->资源根目录
  • 现在,您应该能够通过“test.png”而不是“resources/test.png”访问文件
  • 希望这能有所帮助


    玩得开心

    答案其实很简单,因为它与@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类也可以工作吗?