java实现程序在等待时动画_java – 加载/显示FXML时避免动画短暂停顿

当加载新的FXML并设置BorderPane的中心时,应用程序会短暂“冻结”,无论是来自时间轴还是来自图像视图中的gif,现有动画都将停止.我正在使用此代码更改centerView:

@FXML

public void handleChangeView(ActionEvent event) {

Task loadTask = new Task<>() {

@Override

public Parent call() throws IOException {

String changeButtonID = ((ToggleButton) event.getSource()).getId();

Parent newOne = getFxmls().get(changeButtonID);

if (newOne == null) {

FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/" + changeButtonID + ".fxml"));

newOne = loader.load();

getFxmls().put(changeButtonID, newOne);

}

return newOne ;

}

};

loadTask.setOnSucceeded(e -> {

getMainUI().setCenter(loadTask.getValue());

});

loadTask.setOnFailed(e -> loadTask.getException().printStackTrace());

Thread thread = new Thread(loadTask);

thread.start();

}

虽然这确保了在加载时保持UI响应的工作,但是当中心舞台第一次显示时,存在明显的滞后.查看CPU配置文件:

HpCEK.png

我不确定延迟是来自初始化函数运行还是加载元素.这是程序的GIF,你可以看到可见的延迟:

EvLA4.gif

通过在VLC中加载并逐帧进行,延迟在30 fps视频中看起来是5或6帧,这意味着大约200ms的延迟意味着动画冻结超过50ms左右的初始化方法. (也许整个加载方法会冻结动画?)

问题是,在这期间可以保持动画流畅吗?

// ********* EDIT ********** //

所以我经历了这个项目并尽可能多地删除了一些方法和类,将整个游戏减少到了6个最小的类.我仍然有按下字符按钮(‘你’按钮)的延迟.有了这样一个极小的例子,我迷失了可能是错的.我已将此上传到谷歌驱动器供任何人查看.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值