2017-03-09 26 views
1

我使用ScheduledExecutorService每1秒運行一次循環建立。我有一個WebView(JavaFX),我想從它調用一個函數。在ScheduledExecutorService中執行javascript函數?

我可以調用的函數的罰款,如果我把它放在它像一個按鈕:

button.setOnAction(event -> { 
    webEngine.executeScript("someFunction();"); 
}); 

,並點擊它,它執行得很好,但是當我做:

execService.scheduleAtFixedRate(()->{ 
    loop(); 
    webEngine.executeScript("someFunction();"); 
}, 3000L, 1000L, TimeUnit.MILLISECONDS); 

程序公正在webEngine.executeScript("someFunction();");停止(如果我把那條線放在我的loop()方法中,也是一樣的)

我怎樣才能每秒執行someFunction()與我的其餘部分程序?爲什麼暫停?

+1

你是什麼意思的 「只是停止」 嗎?凍結/掛起?崩潰?如果是這樣,堆棧跟蹤說什麼? – Mena

+0

@Mena我仍然可以點擊東西,做東西,沒有什麼會出現在控制檯中,一切正常,除非在scheduleexecutorservice中執行的任何東西都不會,例如。如果我在'webEngine.executeScript(「someFunction();」)之後放一個'System.out.println(「bleh」)''它沒有達到它 – srysry

回答

1

請試試這個:

timer = new Timer(); 
     timer.scheduleAtFixedRate(new WebViewProcess(), 3000, 1000); 

private class WebViewProcess extends TimerTask { 

     @Override 
     public void run() { 
      Platform.runLater(() -> { 
        webEngine.executeScript("someFunction();"); 
      }); 
     } 
    } 
+1

非常感謝你的工作! – srysry

+0

很高興爲您效勞 –

+1

請注意,「定時器」已棄用,「ScheduledExecutorService」是推薦的替代品。這裏的解決方案可能在'Platform.runLater'異步調用上。 – Mena