我有一个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顺序运行东西,这颠倒了处理顺序。嗯,我想你不能拥有这一切。
答案 0 :(得分:0)
您可以创建服务类(LogFilesService extends Service)并绑定progressProperty。 在Service类中,您可以使用updateProgress更新进度。