首页 > 解决方案 > 为什么我的 javafx imageview 会扭曲我的 gif 播放方式

问题描述

我正在尝试使用 gif 作为我的 javafx 侧边栏的背景,gif 显示和播放但似乎只重复前几帧,即使它有更多。

我已经尝试过通过 fxml 以及在代码中设置 imageview,它们都是一样的。

这是任何想要复制https://pastebin.com/SUV8Lan2的人的 fxml,这是 gif https://www.sendspace.com/file/1hpxs5 这是我配置图像视图的方式:

<ImageView fx:id="backgroundFlow" fitHeight="580.0" fitWidth="250.0" pickOnBounds="true" smooth="false">
     <image>
        <Image url="@../gif/flow.gif" />
     </image>
</ImageView>

我希望 gif 像这样https://gyazo.com/4a2cb29f5bf95ae45c7e4c3006638bac完全显示,而不是我得到这个https://gyazo.com/8db0207787744a4c40266ae1928d34f9

标签: javajavafxgif

解决方案


这似乎是 JavaFX 中的一个错误。图像在 Swing 中正确显示,因此作为一种解决方法,我将使用SwingNode

SwingNode imageNode = new SwingNode();

URL url = new URL(urlSpec);
EventQueue.invokeAndWait(() -> {
    ImageIcon icon = new ImageIcon(url);
    JLabel imageLabel = new JLabel(icon);
    icon.setImageObserver(imageLabel);
    imageNode.setContent(imageLabel);
});

EventQueue.invokeAndWait由于 Swing 对象的线程要求,这是必要的。(JavaFX 具有相同的要求;两者都必须在专用线程中执行 。SwingNode.setContent 方法是一个罕见的例外。


推荐阅读