JavaFX 预加载器未更新进度

标签 javafx

我在使用 JavaFX 预加载器时遇到了问题。在启动阶段,应用程序必须连接到数据库并读取很多数据,所以我认为在此期间显示启动画面会很好。问题是 ProgressBar 自动变为 100%,我不明白为什么。

应用类。线程 sleep 稍后将被真正的代码取代(数据库连接等)

public void init() throws InterruptedException
{
   notifyPreloader(new Preloader.ProgressNotification(0.0));
   Thread.sleep(5000);
   notifyPreloader(new Preloader.ProgressNotification(0.1));
   Thread.sleep(5000);
   notifyPreloader(new Preloader.ProgressNotification(0.2));
}

预加载器
public class PreloaderDemo extends Preloader {

ProgressBar bar;
Stage stage;

private Scene createPreloaderScene() {
    bar = new ProgressBar();
    bar.getProgress();
    BorderPane p = new BorderPane();
    p.setCenter(bar);
    return new Scene(p, 300, 150);        
}

@Override
public void start(Stage stage) throws Exception {
    this.stage = stage;
    stage.setScene(createPreloaderScene());        
    stage.show();
}

@Override
public void handleStateChangeNotification(StateChangeNotification scn) {
    if (scn.getType() == StateChangeNotification.Type.BEFORE_START) {
        stage.hide();
    }
}

@Override
public void handleProgressNotification(ProgressNotification pn) {
    bar.setProgress(pn.getProgress());
    System.out.println("Progress " + bar.getProgress());
}   

出于某种原因,我得到以下输出:

进度 0.0
进步 1.0

最佳答案

我遇到了同样的问题,经过两个小时的搜索和 5 分钟的仔细阅读 JavaDoc,我找到了解决方案。:)

通知由 notifyPreloader() 发送方法只能由 Preloader.handleApplicationNotification() 处理方法和您发送哪种类型的通知无关紧要。

所以改变你的代码是这样的:

public class PreloaderDemo extends Preloader {

   .... everything like it was and add this ...

   @Override
   public void handleApplicationNotification(PreloaderNotification arg0) {
          if (arg0 instanceof ProgressNotification) {
             ProgressNotification pn= (ProgressNotification) arg0;
             bar.setProgress(pn.getProgress());
             System.out.println("Progress " + bar.getProgress());
          }
    }
}

关于JavaFX 预加载器未更新进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20701704/

相关文章:

JavaFX 正确缩放

java - 在 JavaFX 中使用 ObjectBinding 进行双向绑定(bind)

java - [JavaFX]在舞台图标化之前无法更改矩形颜色

JavaFX 组合框 : difference between methods of adding listeners/event handlers

java - 将 TableView prefWidthProperty 绑定(bind)到其父容器的 prefWidthProperty 时出现问题

Javafx 过滤 TableView

java - 如果A是由B启动的,如何使线程A在JavaFX线程B中改变场景?

java - 插入 blob 作为数据类型时出现数据截断错误

java - 无法使用 JavaFX MediaPlayer 播放视频

css - 声明中的javafx css多个值