我构建了此应用,并尝试移至移动/本地桌面。在移动版和本机版中,从类路径加载资源时出错。桌面版本错误:
Caused by: java.lang.NullPointerException
at org.fxapps.alphabet.AlphabetFX.bulkDetailsImages(AlphabetFX.java:178)
但是,请注意,我也无法加载单个文件,它返回null。
检查我的项目:https://github.com/jesuino/alphabetfx
我注意到使用adb的android应用存在相同的错误。
尝试了不同的方法:
还请注意,它只能在本地使用Java。我什至无法在根类路径(/ details)上加载文件。
我有一种非常有效的应用程序:https://github.com/jesuino/battleship-game
这可能是因为我的类路径中有太多资产引起的吗?还是有某种缓存?我在调试日志中看到它可以处理我的大部分资产。
您可以通过以下方式重现该错误:
mvn clean install
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
答案 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$"}
]
}