我正在使用JavaFX并正在解析一个非常大的文件。
我在一个处理解析的类中执行此操作,并且正在创建一个新线程来执行此操作,因此它不会在UI正在进行时锁定它。
以下是我的代码片段:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try
{
// ... Do parsing in here
}
catch(Exception ex)
{
// ... Show Exception
}
}
});
thread.start();
我的UI依赖于正在解析的数据(它显示在UI中)。
无论如何我可以同步这个线程和UI线程,以便在解析文件时更新UI吗?
答案 0 :(得分:0)
你可以这样做。
final int size = //determine the size of the file;
Service<Void> service = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
loop while parsing... {
Platform.runLater(() -> updateProgress(getWorkDone() + 1, size));
}
return null;
}
};
}
};
service.setOnFailed(event -> //error handling);
progressIndicator.visibleProperty().bind(service.runningProperty());
progressIndicator.progressProperty().bind(service.progressProperty());
service.start();