JavaFX GIF未播放完整的GIF [英] JavaFX GIF not playing the full GIF
本文介绍了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,它会在第一次出现绿色圆圈的地方停止
推荐答案
我尝试在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屋!
查看全文