首页 > 解决方案 > java.awt.Toolkit.getDefaultToolkit().createImage(byte[]) 返回 Null

问题描述

javax.swing.ImageIcon有一个带有单个byte[]参数的构造函数。以下是该构造函数的部分代码:

this.image = Toolkit.getDefaultToolkit().createImage(imageData);
if (image == null) {
    return;
}

有时当我调用这个构造函数时,image它确实是空的,我不知道为什么。检查类的源代码java.awt.Toolkit表明方法createImage(byte[])调用抽象方法createImage(byte[], int, int)。从我的调试中,getDefaultToolkit()类的静态方法返回其超类java.awt.Toolkit的实例,并且该类包含该方法的实现。我在网上搜索了类中方法的源代码,发现它包含一行:sun.awt.windows.WToolkitsun.awt.SunToolkitcreateImage(byte[], int, int)createImage(byte[], int, int)sun.awt.SunToolkit

return createImage(new ByteArrayImageSource(data, offset, length));

现在是我可能遗漏一些东西的部分。类sun.awt.image.ByteArrayImageSource扩展类sun.awt.image.InputStreamImageSource,类sun.awt.image.InputStreamImageSource实现接口sun.awt.image.ImageProducer,所以我认为方法createImage(new ByteArrayImageSource(data, offset, length)是指createImage(ImageProducer)类中的方法SunToolkit。我查看了方法的源代码createImage(ImageProducer)以及ByteArrayImageSource构造函数的代码,但我不明白为什么任何createImage()方法都会返回 null。顺便说一句,类InputStreamImageSource没有构造函数。

所以我的问题是:为什么java.awt.Toolkit.getDefaultToolkit().createImage(byte[]) 有时会返回 null?

请注意,我无法提供示例代码来重现该问题,因为有时相同的字节数组会导致创建图像,有时则不会。基本上我只是调用ImageIcon构造函数并将其传递给一个字节数组。

这是一个Swing应用程序,所有代码都在事件调度线程 (EDT) 上运行。

标签: javaimageswing

解决方案


推荐阅读