java - 为什么我的 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
解决方案
这似乎是 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 方法是一个罕见的例外。)
推荐阅读
- java - 创建 EntityManagerFactory 时出现 ArrayIndexOutOfBoundsException
- javascript - Apache2 + Socket.io 反向代理:正确的方法
- c++ - 如何正确地将 do-loop 转换为 for-loop?
- python - 将 numpy.where 转换为 Linq
- flutter - 如何使用 Flutter MVC 设计模式
- java - 通过枚举休眠查找
- python - 使用 io.imshow() 显示 2 张图像时,python 行和列中的 Plt.subplot() 问题
- environment-variables - 在 Azure Pipeline 中永久设置环境变量
- php - 为什么我的输出缓冲区被 PHP 标记为“禁用”?
- sql - 在 ORACLE SQL 中创建规则以防止插入重复数据