javafx - 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,它会在第一次出现绿色圆圈的地方停止
解决方案
我尝试使用 JRE Temurin 16.0.2(adoptopenjdk 的 java 运行时)和 JavaFX 17.0.0.1 在 Windows PC 上播放 gif,并且效果很好(一直播放)。
然后我尝试在 JavaFX 16 上运行相同的测试应用程序,它在播放整个动画之前开始循环(在动画中开始出现绿点之前)。
因此,JavaFX 16 复制了 Michelle 所描述的问题,而 JavaFX 17 由于错误修复而修复了该问题(正如 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 播放中断,您可以自己解码 gif 并将其作为动画播放。另请参阅此基于 sprite 的示例播放。
推荐阅读
- mongodb - 我们可以在 Jest 中结合两个预设 MongoDB 和 puppeteer 吗?
- javascript - 显示存储在 mongoDB 中的日期的星期几
- java - Java FXML - 尝试加载新场景时出现空指针异常
- python - 连接表(1:多表关系)的正确 SQLAlchemy ORM 结构是什么?
- javascript - Django 在模板标签中使用变量
- python - Aiogram python InlineKeyboard
- c - 如何在一个结构中定义一个结构并重复使用相同的名称两次?
- java - Micronaut 和 Gradle 无法进行测试
- telegram - 是否可以使用电报机器人内联按钮来获取用户实时位置?
- php - 从 php 在命名管道上运行 shell 命令