java - 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.WToolkit
sun.awt.SunToolkit
createImage(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) 上运行。
解决方案
推荐阅读
- html - 自动完成输入涵盖了常规表单输入。如何使用自动完成输入提交表单
- c++ - 为什么添加 sqrt() 不会导致 C++ 中的冲突?
- c++ - 无论选择什么选项,函数“void sub(int Subtraction)”都会保持打印
- c# - 打开时如何在 GUI 上自动打印?
- python - 使用 Azure Python SDK 验证用户的首选方式是什么?
- azure - 用于合并两个事件的 Azure 流分析查询
- java - 为什么我需要为 Java 安装 JDK,而只需要为 Python 安装安装程序?
- javascript - DataTable 错误“表中没有可用数据”,表缩小
- google-assistant-sdk - 嵌入式设备上的谷歌助手 sdk 有什么方法可以获取会话 ID?
- python - 为什么相同的逻辑方程在 python 和 c++ 中返回 2 个不同的结果?