0

我构建了这个应用程序并尝试转移到移动/本机桌面。在移动和本机中,我从类路径加载资源时出错。桌面版错误:

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”的文件。但是,当我尝试阅读它时,我仍然得到一个空值。我将继续使用这种方法,并在找到它时用我的解决方案更新它。

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

4

1 回答 1

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$"}
  ]
}

于 2020-11-11T06:00:36.890 回答