以下のコードで私が間違っていることを誰かに説明してもらえますか?
executeJavascript メソッドを使用して一連のコマンドを Webview に送信しています。各コマンドをループしてから、次のコマンドが実行されるまで任意の時間待機します。
これを実行すると実際に何が起こるかというと、ループで一時停止するたびにアプリケーションがハングし、ループが完了するとすべての JavaScript アクションが一度に発生します。私のexecuteJavascriptをRunlaterクラスにラップすることで、すべてがアプリケーションスレッドとうまく同期されると思いました...
私はぐるぐる回っているように見えるので、助け/指示をいただければ幸いです、ありがとう。
以下を含む 3 つのクラス A: Main.class を設定しました。
...scene.setOnKeyPressed(event -> {
switch (event.getCode()) {
case SPACE:
scriptRunner.run();
case SHIFT:
B: 以下を含む ScriptRunner.class:
public class ScriptRunner extends Task<Void> {
@Override
protected Void call() throws Exception {
printOut("Running Test");
try (InputStream fileInputStream = new FileInputStream("test.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, Charset.forName("UTF-8"));
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);) {
String getCurrentLine;
StepRunner stepRunner = new StepRunner();
while ((getCurrentLine = bufferedReader.readLine()) != null) {
final String currentLine = getCurrentLine;
Platform.runLater(new Runnable() {
@Override
public void run() {
stepRunner.runStep(currentLine);
}
});
Thread.sleep(3000);
}
printOut("Test finished");
bufferedReader.close();
} catch (
IOException e) {
e.printStackTrace();
}
return null;
}
C: 以下を含む StepRunner.class:
public class StepRunner extends Task<Void> {
private String currentCommand;
public StepRunner (String currentCommand){
this.currentCommand = currentCommand;
}
@Override
protected Void call() throws Exception {
printOut("Got Here with " + currentCommand);
WebEngine.executeJavascript(currentCommand);
return null;
}
}