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

时间:2018-03-02 21:35:41

标签: java intellij-idea javafx javafx-8

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”);'

2 个答案:

答案 0 :(得分:0)

实际上答案实际上非常简单,因为它与@ KolyaSh的评论有关。在反编译我的JAR之后,我发现'resources'文件夹从未实际放入JAR文件中,因此我的代码首先不起作用。另一个问题是我尝试检索资源URL的方式。我尝试了ClassLoader.getSystemResource(),但我更多地研究了为什么这不是解决方案。

解决方案是获取调用类的ClassLoader。我还写了一个方法来读取文件,看起来像这样:

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。

再次感谢所有帮助回答此问题的人!希望这能解决所有问题。

答案 1 :(得分:-1)

请尝试以下步骤:

  1. 右键单击资源包(在IntelliJ中) - >将目录标记为 - >资源根。
  2. 现在你的文件应该可以通过" test.png"而不是" resources / test.png"。
  3. 希望这会有所帮助。

    玩得开心! =)