与UI线程

时间:2017-03-06 21:50:44

标签: multithreading javafx

我正在使用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吗?

1 个答案:

答案 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();