JavaFX working with threads and GUI

前端 未结 2 677
予麋鹿
予麋鹿 2020-12-02 21:58

I have a problem while working with JavaFX and Threads. Basically I have two options: working with Tasks or Platform.runLater. As I understand

相关标签:
2条回答
  • 2020-12-02 22:18

    Use a Worker (Task, Service) from the JavaFX Application thread if you want to do something in the background.

    http://docs.oracle.com/javafx/2/api/javafx/concurrent/package-summary.html

    Use Platform.runLater from a background thread if you want to do something on the JavaFX Application thread.

    http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater%28java.lang.Runnable%29

    0 讨论(0)
  • 2020-12-02 22:25

    As puce says, you have to use Task or Service for the things that you need to do in background. And Platform.runLater to do things in the JavaFX Application thread from the background thread.

    You have to synchronize them, and one of the ways to do that is using the class CountDownLatch.

    Here is an example:

    Service<Void> service = new Service<Void>() {
            @Override
            protected Task<Void> createTask() {
                return new Task<Void>() {           
                    @Override
                    protected Void call() throws Exception {
                        //Background work                       
                        final CountDownLatch latch = new CountDownLatch(1);
                        Platform.runLater(new Runnable() {                          
                            @Override
                            public void run() {
                                try{
                                    //FX Stuff done here
                                }finally{
                                    latch.countDown();
                                }
                            }
                        });
                        latch.await();                      
                        //Keep with the background work
                        return null;
                    }
                };
            }
        };
        service.start();
    
    0 讨论(0)
提交回复
热议问题