SwingFXUtils图像序列化的替代方案(Javafx、Swing、Raspberry Pi)

SwingFXUtils图像序列化的替代方案(Javafx、Swing、Raspberry Pi),java,swing,javafx,raspberry-pi,arm,Java,Swing,Javafx,Raspberry Pi,Arm,我的JavaFX应用程序的一个用例是在一端加载一个图像,通过TCP套接字将其序列化,在另一端显示为JavaFX图像 为了实现这一点,我使用SwingFXUtils.fromFXImage()和SwingFXUtils.toFXImage()来创建和读取可以序列化的buffereImage 一切正常。但我想在树莓皮上运行显示端。正如我发现的,在ARM上的JavaFX中没有Swing组件的集成,因此在Raspi上使用SwingFXUtils时,我会得到一个NoClassDefFoundError 请

我的JavaFX应用程序的一个用例是在一端加载一个图像,通过TCP套接字将其序列化,在另一端显示为JavaFX图像

为了实现这一点,我使用
SwingFXUtils.fromFXImage()
SwingFXUtils.toFXImage()
来创建和读取可以序列化的
buffereImage

一切正常。但我想在树莓皮上运行显示端。正如我发现的,在ARM上的JavaFX中没有Swing组件的集成,因此在
Raspi
上使用
SwingFXUtils
时,我会得到一个
NoClassDefFoundError


请建议如何在不使用
SwingFXUtils
的情况下创建和读取可序列化图像对象?

谢谢您的回答

@当然,在序列化之前,我已经将我的
BufferedImage
写入了
ByteArray
。我昨晚的解释不够准确。我有罪

我找到了解决问题的方法:为了让它在树莓Pi上工作,我用一个
InputStream
替换了
BuffereImage
,以读取包含图像数据的
ByteArray
。这允许我使用
InputStream
创建JavaFX
Image
对象,而不是使用
SwingFXUtils

之前:

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(imageUpdate.getImageByteArray()));

imageView.setImage(SwingFXUtils.toFXImage(bufferedImage, null));
InputStream inputStream = new ByteArrayInputStream(imageUpdate.getImageByteArray());

imageView.setImage(new Image(inputStream));
,其中
imageUpdate
是一个
imageUpdate
对象,用于通过TCP套接字进行数据传输(包含图像和其他数据)

如前所述,这会产生

Exception in thread "..." java.lang.NoClassDefFoundError: javafx/embed/swing/JFXPanel
在Raspberry Pi上,因为ARM体系结构的JavaFX端口中缺少Swing类

之后:

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(imageUpdate.getImageByteArray()));

imageView.setImage(SwingFXUtils.toFXImage(bufferedImage, null));
InputStream inputStream = new ByteArrayInputStream(imageUpdate.getImageByteArray());

imageView.setImage(new Image(inputStream));

这个解决方案现在就像我的Raspberry Pi上的符咒一样有效。

缺少的类SwingFXUtils的源代码似乎位于:


它是GPL授权的。我尝试了它,它在raspberry PI上工作

而不是序列化
BuffereImage
对象,只发送原始图像数据,而不关心
BuffereImage
不可序列化,因此您可能已经使用了一些专门的序列化,比如
ImageIO.write(…)
(即,您以通用文件格式编写图像)。如果是这种情况,那么您只需使用
新图像(inputstream)
,在Pi上读回图像即可。无需
SwingFXUtils
。PS:这可能有助于编写一些代码,以及获得的堆栈跟踪(找不到哪个类?).PS:我曾经为一个编写了一个快速PoC,它完全避免了
SwingFXUtils
(为了更好的内存使用率/性能)。您可以尝试一下,但我怀疑您会遇到相同的
NoClassDefFoundError
。。。