JavaFX GIF未播放完整的GIF [英] JavaFX GIF not playing the full GIF

查看:0
本文介绍了JavaFX GIF未播放完整的GIF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在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,它会在第一次出现绿色圆圈的地方停止

推荐答案

我尝试在Windows PC上使用JRE Temurin 16.0.2(adadtopenjdk的Java运行时)和Java FX 17.0.0.1回放gif,并且一直在播放。

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

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

因此,如果使用长时间运行的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);
    }
}

如果您想要更好地控制回放,或者如果您必须使用较早的带有中断gif回放的JavaFX版本,您可以decode the gif yourself and play it as an animation。另请参阅sample sprite based playback

这篇关于JavaFX GIF未播放完整的GIF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆