2017-03-09 12 views
1

1秒ごとに実行されるScheduledExecutorServiceを使用してループを確立しました。私はそれから関数を呼び出す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

@メナ私はまだ物事をクリックして何かをすることができますが、何もコンソールに表示されず、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

'Timer'は推奨されておらず、' ScheduledExecutorService'が推奨代替品です。おそらく、ここでの解決は 'Platform.runLater'非同期呼び出しです。 – Mena

関連する問題