Java 更新到JDK1.7U45时,ImageIO将JBoss上的NPE作为7.2.0.Final放入iOreRegistry
从21升级到JDK 1.7更新45,在JBoss中以7.2.0.Final(或EAP 6.1.0.Alpha1(作为7.2.0.Alpha1-redhat-4))运行,初始化Java 更新到JDK1.7U45时,ImageIO将JBoss上的NPE作为7.2.0.Final放入iOreRegistry,java,configuration,jboss,java-7,javax.imageio,Java,Configuration,Jboss,Java 7,Javax.imageio,从21升级到JDK 1.7更新45,在JBoss中以7.2.0.Final(或EAP 6.1.0.Alpha1(作为7.2.0.Alpha1-redhat-4))运行,初始化ImageIO时,我得到NullPointerException。上载过程中用于调整图像大小的 iOreRegistry被称为ImageIO初始化的一部分,但它在以下代码处被调用: public static IIORegistry getDefaultInstance() { AppContext context
ImageIO
时,我得到NullPointerException
。上载过程中用于调整图像大小的
iOreRegistry
被称为ImageIO
初始化的一部分,但它在以下代码处被调用:
public static IIORegistry getDefaultInstance() {
AppContext context = AppContext.getAppContext(); // <- context==null here??
JBoss默认导入javax.imageio.*
包。有关这一点的证据,请参阅其中提到的javax.api,它指的是此模块:
modules/system/layers/base/javax/api/main/module.xml
我还尝试将它们显式地添加到jboss deployment structure.xml中:
<system>
<paths>
<path name="javax/imageio"/>
<path name="javax/imageio/event"/>
<path name="javax/imageio/metadata"/>
<path name="javax/imageio/plugins/bmp"/>
<path name="javax/imageio/plugins/jpeg"/>
<path name="javax/imageio/spi"/>
<path name="javax/imageio/stream"/>
</paths>
</system>
但在随后的尝试中,如果不重新启动服务器,您会看到:
java.lang.NullPointerException
javax.imageio.spi.IIORegistry.getDefaultInstance(IIORegistry.java:155)
java.lang.NoClassDefFoundError: Could not initialize class javax.imageio.ImageIO
这是有误导性的-该类对类加载器可用,但由于第一次失败而被卸载。因此,请记住在再次测试之前重新启动服务器
似乎有什么东西阻止了
AppContext.getAppContext()
返回任何有用的东西,但目前我不知道这是什么神奇的配置 我面临着同样的问题,我使用这里提到的解决方案作为临时解决办法:。这对我来说确实有用
希望甲骨文能尽快找到解决办法。嗯,u60仍然存在这个问题。我想我们仍在等待甲骨文的修复 然而,对于我的特殊问题,这里建议的整洁工作效果很好: 我刚刚从中得出这一部分:
if(AppContext.getAppContext() == null) {
SunToolkit.createNewAppContext();
}
由于我在其中使用的代码很少被调用,并且执行空检查的成本很低,因此我认为它不能保证使用整个
ApplicationListener
解决方案的复杂性。NoClassDefFoundError
如果类未能初始化其静态字段,则是正常情况(类初始化只发生一次)。但我同意这是令人困惑的。另外,你确定com.sun.imageio.*
是你要找的软件包吗?imageio在javax.imageio
@haraldK谢谢!是的,从某个论坛复制/粘贴XML配置造成了愚蠢的疏忽。我现在在问题文本中纠正了这一点,因为很遗憾,情况也是如此(默认情况下,这些类是导入的)。这并不奇怪,因为类不是没有被加载的(我想我记得类加载器会逐出无法初始化的类-谢谢你的确认).AppContext显然不在早期的JDK更新版本中,但仍然无法解释为什么AppContext为null…AppContext.getAppContext()
自u25以来,似乎出现了很多bug。不确定原因是什么,但希望Oracle对此进行调查。我看到过一些解决方法,它们使用反射和setAccessible显式设置appcontext(true)
,但不确定这是否是个好主意……是的,谢谢@haraldK-我现在认为你是对的,这是一个Java错误:(现在可能会在OpenJDK上运行,一旦他们修复它,我会回到Oracle的版本。虽然我仍然有点困惑,我可以让它在JUnit中运行,但在JBoss中不运行…你能不能以某种方式修复它?我在Tomcat web应用中也有同样的问题,我不知道我能做些什么来修复它。尽管这是一个乏味的过程..我真的不知道我认为每个遇到这个问题的人都应该向Oracle提交一份错误报告,或者投票支持他们的错误跟踪系统中存在的错误。虽然不能保证这将有助于获得修复,但至少让Oracle意识到这个问题有多大并没有坏处。他们的错误跟踪系统是哪一个?
if(AppContext.getAppContext() == null) {
SunToolkit.createNewAppContext();
}