SwingFXUtils替代图像序列化(Javafx,Swing,Raspberry Pi)

问题描述 投票:1回答:2

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

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

一切正常。但我想在覆盆子pi上运行显示侧。正如我发现的那样,ARM上的JavaFX中没有Swing组件的集成,所以当在NoClassDefFoundError上使用SwingFXUtils时,我得到了Raspi

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

java swing javafx raspberry-pi arm
2个回答
1
投票

丢失类SwingFXUtils的源代码似乎是:

http://cr.openjdk.java.net/~ant/RT-37740/webrev.0/modules/swing/src/main/java/javafx/embed/swing/SwingFXUtils.java.html

它是GPL许可的。我尝试了它,它适用于树莓PI


1
投票

谢谢您的回答。

@haraldK当然我在序列化之前把BufferedImage写成了ByteArray。我昨晚的解释还不够准确。 Mea culpa。

我为我的问题找到了一个解决方案:为了让它在Raspberry Pi上运行,我只需用BufferedImage替换InputStream来读取包含图像数据的ByteArray。这允许我使用Image而不是使用InputStream创建JavaFX SwingFXUtils对象。

之前:

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

imageView.setImage(SwingFXUtils.toFXImage(bufferedImage, null));

,其中imageUpdate是一个ImageUpdate对象,用于通过TCP套接字进行数据传输(包含图像和附加数据)。

如前所述,这产生了

Exception in thread "..." java.lang.NoClassDefFoundError: javafx/embed/swing/JFXPanel

因为在Java架构的JavaFX端口中缺少Swing类,所以在Raspberry Pi上。

后:

InputStream inputStream = new ByteArrayInputStream(imageUpdate.getImageByteArray());

imageView.setImage(new Image(inputStream));

这个解决方案现在就像我的Raspberry Pi上的魅力一样。

© www.soinside.com 2019 - 2024. All rights reserved.