无法从类路径加载资源

时间:2020-11-02 18:09:06

标签: gluon gluon-mobile gluon-desktop

我构建了此应用,并尝试移至移动/本地桌面。在移动版和本机版中,从类路径加载资源时出错。桌面版本错误:

Caused by: java.lang.NullPointerException
    at org.fxapps.alphabet.AlphabetFX.bulkDetailsImages(AlphabetFX.java:178)

它指的是这一行:https://github.com/jesuino/alphabetfx/blob/master/alphabetfx/src/main/java/org/fxapps/alphabet/AlphabetFX.java#L178

但是,请注意,我也无法加载单个文件,它返回null。

检查我的项目:https://github.com/jesuino/alphabetfx

我注意到使用adb的android应用存在相同的错误。

尝试了不同的方法:

  • 使用的胶粘剂最新版本
  • 将所有内容放入同一项目

还请注意,它只能在本地使用Java。我什至无法在根类路径(/ details)上加载文件。

我有一种非常有效的应用程序:https://github.com/jesuino/battleship-game

这可能是因为我的类路径中有太多资产引起的吗?还是有某种缓存?我在调试日志中看到它可以处理我的大部分资产。

您可以通过以下方式重现该错误:

  • 使用mvn clean install
  • 构建项目
  • 然后进入Alphabetfx-app并运行mvn client:build client:package
  • 尝试运行可执行文件:./target/client/x86_64-linux/AlphabetFXApp

请帮助!

编辑:

正如Jose在Twitter [1]中指出的那样,列出来自JAR或本机位(无FS)的资源将不起作用,因此,我使用的文件名为“ details.txt”。但是,当尝试读取它时,我仍然得到null。我将继续使用这种方法,并在找到解决方案时对其进行更新。

[1] https://twitter.com/JPeredaDnr/status/1323348851345002502

1 个答案:

答案 0 :(得分:0)

我找到了解决方法!

是graalvm没有将我的文件复制到本地映像。看到这个:

https://github.com/oracle/graal/blob/master/substratevm/Resources.md

默认配置未将类路径中的所有文件都包含到本机映像中。我要做的是将文件重命名为具有受支持的扩展名,我使用了“ .dat”,因为不支持“ .txt”。默认情况下,请参阅支持的资源扩展列表:

文件: $ {App} /target/client/x86_64-linux/gvm/resourceconfig-x86_64-linux.json

{
  "resources": [
    {"pattern": ".*\\.png$"},
    {"pattern": ".*\\.jpg$"},
    {"pattern": ".*\\.jpeg$"},
    {"pattern": ".*\\.gif$"},
    {"pattern": ".*\\.bmp$"},
    {"pattern": ".*\\.ttf$"},
    {"pattern": ".*\\.raw$"},
    {"pattern": ".*\\.xml$"},
    {"pattern": ".*\\.fxml$"},
    {"pattern": ".*\\.css$"},
    {"pattern": ".*\\.gls$"},
    {"pattern": ".*\\.json$"},
    {"pattern": ".*\\.dat$"},
    {"pattern": ".*\\.license$"},
    {"pattern": ".*\\.frag$"},
    {"pattern": ".*\\.vert$"},
    {"pattern": ".*\\.obj$"}
  ]
}