JavaFX应用程序:在读取文件时显示栏中的进度

时间:2017-07-26 12:37:52

标签: java javafx progress-bar

我有一个csv文件阅读器,它调用一个应该更新进度条的方法。但是,即使我尝试使用Platform.runLater进行计划,进度条也不会更新。文件读取是同步处理的一部分,所以我不能在自己的线程中运行读取器 - 我必须等待线程加入。进度条正在其他一些环境中工作。我尝试了什么:

public CsvFile(File file, SEPARATOR separator)
{
    this.file = file;
    this.separator = separator.value();
    setPattern();

    Thread thread = new Thread() {
        public void run() {
            readFile();
        };
    };
    thread.start();
    try
    {
        Thread.sleep(5000);//HACK
        thread.join();//HACK
    }
    catch (InterruptedException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

进度条方法,由readFile()调用:

public void setProgressExecute(double progress)

{
    //ProgressExecute.setProgress(progress);
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            ProgressExecute.setProgress(progress);
        }
    });
}

更新

我现在正在自己的线程中调用new CsvFile。这使得进度条工作。但是,它也迫使我使用Platform.runLater来运行GUI更新,因为只有JavaFX线程可以更新GUI的某些部分。我的新问题是Platform.runLater:它以LIFO顺序运行东西,这颠倒了处理顺序。嗯,我想你不能拥有这一切。

1 个答案:

答案 0 :(得分:0)

您可以创建服务类(LogFilesService extends Service)并绑定progressProperty。 在Service类中,您可以使用updateProgress更新进度。