2

我的软件有问题,在构建和运行它作为使用 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 依赖项的一部分(不是我介绍的)。

我真的不知道接下来要尝试什么,并欢迎任何建议!

4

1 回答 1

0

imagej-legacy版本10.37.4应该解决这个问题,这将很快通过pom-scijava 29.0.0见这里

我测试pom-scijava 29.0.0-beta-2并确认它解决了这个问题。

于 2020-07-07T11:36:59.997 回答