java.awt.Toolkit.getDefaultToolkit().createImage(字节[])返回Null
类java.awt.Toolkit.getDefaultToolkit().createImage(字节[])返回Null,java,image,swing,Java,Image,Swing,类javax.swing.ImageIcon有一个带有单个字节[]参数的构造函数。以下是该构造函数的部分代码: this.image=Toolkit.getDefaultToolkit().createImage(imageData); if(image==null){ 返回; } 有时,当我调用这个构造函数时,图像确实是空的,我不知道为什么。检查类java.awt.Toolkit的源代码显示方法createImage(byte[])调用抽象方法createImage(byte[],int,i
javax.swing.ImageIcon
有一个带有单个字节[]
参数的构造函数。以下是该构造函数的部分代码:
this.image=Toolkit.getDefaultToolkit().createImage(imageData);
if(image==null){
返回;
}
有时,当我调用这个构造函数时,图像
确实是空的,我不知道为什么。检查类java.awt.Toolkit
的源代码显示方法createImage(byte[])
调用抽象方法createImage(byte[],int,int)
。通过我的调试,类java.awt.Toolkit
的静态方法getDefaultToolkit()
返回sun.awt.windows.WToolkit
的一个实例,其超类是sun.awt.SunToolkit
,该类包含方法createImage(byte[],int,int)
的实现。我在Internet上搜索classsun.awt.SunToolkit
中方法createImage(byte[],int,int)
的源代码,发现它只包含一行:
返回createImage(新的ByteArrayImageSource(数据、偏移量、长度));
现在,我可能会错过一些东西。Classsun.awt.image.ByteArrayImageSource
扩展Classsun.awt.image.InputStreamImageSource
和Classsun.awt.image.InputStreamImageSource
实现接口sun.awt.image.ImageProducer
,因此我认为该方法创建图像(新的ByteArrayImageSource(数据、偏移、长度)
在类SunToolkit
中引用了方法createImage(ImageProducer)
。我已经查看了方法createImage(ImageProducer)
的源代码以及ByteArrayImageSource
构造函数的代码,我看不出为什么有createImage()
方法将返回null。顺便说一下,类InputStreamImageSource
没有构造函数
所以我的问题是:为什么java.awt.Toolkit.getDefaultToolkit().createImage(byte[])
有时会返回null
请注意,我无法提供示例代码来重现问题,因为有时相同的字节数组会导致创建图像,有时则不会。基本上,我只是调用ImageIcon
构造函数并向其传递字节数组
这是一个Swing应用程序,所有代码都在事件调度线程(EDT)上运行。是异步创建映像的方法吗?文档中没有说明它是异步创建的,但是从内存中可以看到许多涉及映像加载的
工具包方法。请尝试将其添加到。@andrewhompson如何发现是否调用new ImageIcon(字节)
正在异步创建映像吗?关于你的建议:尝试将其添加到MediaTracker中。你能给我指一个示例代码来说明如何实现这一点吗?“我没有映像”那么什么是this.image=Toolkit.getDefaultToolkit().createImage(imageData);
?@andrewhompson我的问题是该方法createImage()
返回null。如果我错了,请纠正我,但如果该方法返回null,则意味着我没有图像,不是吗?