2017-07-26 20 views
0

我有一个浏览器里面的Javafx项目。我在浏览器中使用angularJS。当我尝试从后台线程转到新状态时,视图不会执行它,直到我与其中一个按钮进行交互。所以角码被调用,但视图被冻结,直到点击某物。从后台线程更新javaFX浏览器内容

Task task = new Task<Void>() { 
     @Override public Void call() { 
      while (true) { 
       try { 
        System.out.println("sLEEPING"); 
        Thread.sleep(4000); 
        System.out.println("Reloading page"); 
        Platform.runLater(() -> { 
         communicator.changeUI(); 

        }); 
        System.out.println("pAGE Reloaded"); 

       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    Thread t = new Thread(task); 
    t.start(); 

回答

1

不更新从后台线程UI的状态(见documentation了“线程”一节)。将实际更改UI的代码封装在Platform.runLater()(或使用TaskonSucceeded处理程序)。

例如为:

// Runs in some background thread: 
public class MyRunnable { 

    @Override 
    public void run() { 
     // long-running code here... 

     // to update UI: 
     Platform.runLater(() -> { 
      // update UI here... 
     }); 
    } 
} 
+0

我说我的代码,我使用Platform.runLater(),但认为仍然在等待一个点击。我在想也许我需要告诉浏览器做一些更新?不是实际重新加载 –