我的软件有问题,在构建和运行它作为使用 Maven 构建的 FatJAR/UberJar 时。在这种情况下,我收到此错误:
Uncaught error fetching image:
java.lang.IllegalStateException: zip file closed
at java.util.zip.ZipFile.ensureOpen(ZipFile.java:686)
at java.util.zip.ZipFile.getInputStream(ZipFile.java:366)
at java.util.jar.JarFile.getInputStream(JarFile.java:452)
at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:164)
at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:127)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
但是,当直接从 IntelliJ 启动时,该软件可以正常工作。
我在这里创建了一个最小的示例来重现错误:
https://github.com/michaelmell/bugfix_003-ImageJFunctions_show-call-fails-in-UberJar
这个问题在某种程度上与这个调用有关(请参阅 Git 存储库以获取完整代码):
ImageJFunctions.show(input);
我怀疑我需要调整阴影pom.xml
,但我对配置太陌生。有关如何构建 JAR 和完成着色的详细信息,请参阅pom.xml
和。deploy.sh
我还使用 IntelliJ 进入了 JAR,并在依赖项中设置了一个断点URLImageSource::getDecoder
来检查失败的 URL。这是:
/PATH/TO/THE/GIT/REPOSITORY/target/ImageJFunctions_show__failure_minimal_example-1.0-SNAPSHOT.jar!/icons/imagej-256.png
它存在于 JAR 文件中:icons/imagej-256.png
. 请注意,这是一个图标,它是 imagej 依赖项的一部分(不是我介绍的)。
我真的不知道接下来要尝试什么,并欢迎任何建议!