0
我有一個csv文件閱讀器,它調用一個應更新進度欄的方法。但是,即使我嘗試使用Platform.runLater進行安排,進度欄也不會更新。文件讀取是同步處理的一部分,所以我不能只在自己的線程中運行讀取器 - 我必須等待線程加入。進度條正在其他環境中工作。我試了一下:JavaFX應用程序:在閱讀文件時顯示酒吧進度
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順序運行東西,這顛倒了處理的順序。那麼我想你不能擁有一切。
如果您只是要等待它在當前線程中完成,那麼使用後臺線程有什麼意義?你的代碼從'Thread thread = new Thread(){'直到'catch'塊的末尾,基本上等同於簡單地調用'readFile()'。 –
好吧,我絕望了。我認爲如果我睡覺的話,也許Platform.runlater會有機會運行,但這不起作用。 – Adder
調用'CsvFile'構造函數的線程是什麼? –