JavaFX GIF 没有播放完整的 GIF

Posted

技术标签:

【中文标题】JavaFX GIF 没有播放完整的 GIF【英文标题】:JavaFX GIF not playing the full GIF 【发布时间】:2021-11-14 07:47:26 【问题描述】:

我正在尝试在 JavaFX 的场景中显示 GIF,我已将其显示在场景中并且它会播放,但它会在播放完整的 GIF 之前循环回到开头。 GIF 有 216 帧,所以大约 30 秒长。这就是为什么它不播放整个事情的原因吗?或者有没有办法让它发挥完整的作用?

rules.setOnAction(new EventHandler<ActionEvent>() 
        @Override public void handle(ActionEvent e) 
            Stage rulesWindow = new Stage();

            Pane r_2 = new Pane(tutorialView);
            Scene sc = new Scene(r_2,width/2,height/2);
            rulesWindow.setScene(sc);

            tutorialView.setFitWidth(width/2);
            tutorialView.setFitHeight(height/2);
            rulesWindow.show();

        
    );

我在方法外实例化了tutorialView,所以在这部分代码中是看不到的。

这是完整的 GIF

我无法上传它播放的内容,因为文件太大,但如果你观看完整的 GIF,它会在第一次出现绿色圆圈的地方停止

【问题讨论】:

minimal reproducible example 请.. @kleopatra 我已经更新了 或者,考虑用户可以导航的ListViewImageView 这个问题 (bugs.openjdk.java.net/browse/JDK-8267314) 自 JavaFX 17 起应该已修复。 【参考方案1】:

我尝试使用 JRE Temurin 16.0.2(adoptopenjdk 的 java 运行时)和 JavaFX 17.0.0.1 在 Windows PC 上播放 gif,并且效果很好(一直播放)。

然后我尝试在 JavaFX 16 上运行相同的测试应用程序,它在播放整个动画之前开始循环(在动画中开始出现绿点之前)。

因此,JavaFX 16 复制了 Michelle 描述的问题,而 JavaFX 17 修复了由于 bug fix 引起的问题(正如 Jose 预测的那样)。

因此,如果使用长时间运行的 gif,请确保您使用的是 JavaFX 17+。

测试代码(使用问题中的 gif):

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class GifTest extends Application 
    @Override
    public void start(Stage stage) 
        Scene scene = new Scene(
                new StackPane(
                        new ImageView(
                                GifTest.class.getResource(
                                        "game.gif"
                                ).toExternalForm()
                        )
                )
        );

        stage.setScene(scene);
        stage.show();
    

    public static void main(String[] args) 
        launch(args);
    


如果您想对播放进行更多控制,或者如果您必须使用较早的 JavaFX 版本但 gif 播放中断,您可以decode the gif yourself and play it as an animation。另请参阅sample sprite based playback。

【讨论】:

以上是关于JavaFX GIF 没有播放完整的 GIF的主要内容,如果未能解决你的问题,请参考以下文章

Gif 没有在 JFrame 中播放

在 JFrame 中显示一个透明的 GIF 而没有在播放时保留每一帧? (初学者)

颤动中的Gif完成监听器

解决React Native的Android端gif图片显示以及只播放一次的问题

React Native 暂停/播放 GIF

动画 gif 不播放 - 鼠标侦听器 - 事件鼠标输入