如何解决无法从类路径加载资源
我构建了此应用,并尝试移至移动/本地桌面。在移动版和本机版中,从类路径加载资源时出错。桌面版本错误:
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
构建项目
- 然后进入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
解决方法
我找到了解决方法!
是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$"}
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。