gpt4 book ai didi

java - 无法在 WAS 8.5 中加载 javax.imageio.ImageIO 类

转载 作者:行者123 更新时间:2023-11-29 04:33:25 30 4
gpt4 key购买 nike

我无法加载 JAI 1.3.0 的 ImageIO 类。 Java 6 和 Web 应用程序服务器 (WAS) 8.5。我的代码适用于 Java 6 和 WAS(7.0.19)。

我已经在 pom.xml 中适本地提到了依赖关系。需要知道是否有人有同样的问题。

byte[] imgBytes = imagesVO.getImgBytes();
BufferedImage image = ImageIO.read(new ByteArrayInputStream(imgBytes));

看来我的服务器在执行期间无法加载 ImageIO 类,因此 image值即将变为空。 我正在 imagesVO 中传递 Tiff 格式文件.

最佳答案

WAS 8.5 中有一个关于 ImageIO 库的行为变化,作为该版本中添加的一些类加载器泄漏预防逻辑的一部分。启用泄漏防护后,ImageIO 库将立即实例化为服务器启动过程的一部分,目的是防止它链接(永久地,因为它对 Java EE 类加载的动态特性不友好)到应用程序提供的应用程序实现类。但副作用是,由于库是在应用程序类出现之前实例化的,因此将无法找到任何应​​用程序提供的插件。

对此有一些潜在的解决方法:

1) 在执行操作之前显式调用 ImageIO.scanForPlugins()。这将告诉 ImageIO 使用线程上下文类加载器对插件类进行重新扫描,然后你的类将被拾取。请注意,这将导致从系统级 ImageIO 库到您的应用程序类的永久引用,因此如果您在不重新启动 JVM 的情况下重新启动应用程序,类加载器将被泄漏(这在以前的 WebSphere 版本中已经发生,所以这可能对你来说不是什么大问题)。

2) 在您的服务器中禁用类加载器泄漏防护。您可以使用系统属性 (com.ibm.ws.runtime.component.disableMemoryLeakService=true) 来执行此操作。同样的警告也适用于类加载器的泄漏。

3) 将必要的 ImageIO 库添加到您的 JVM 类路径中。需要 JVM 级类路径修改的情况非常少,但这就是其中之一 - ImageIO 将在服务器启动期间扫描插件,找到您的插件(因为它在 JVM 类路径中),并作为额外的好处是它不会泄漏您的应用程序类加载器。

关于java - 无法在 WAS 8.5 中加载 javax.imageio.ImageIO 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42840693/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com