0
有人可以请向我解释我在做什么错了下面的代码?如何让JavaFx中的WebView等待任意时间而不挂上应用程序?
我正在使用executeJavascript方法向Webview发送一系列命令,我想遍历每个命令,然后在执行下一个命令之前等待任意长度的时间。
当我运行这个程序时,实际发生的事情是应用程序每次都会在循环中暂停,然后一旦循环完成,我的所有javascript操作都会立即发生。我想通过将我的executeJavascript包装到Runlater类中,它将全部与应用程序线程很好地同步...
我似乎要围绕着这样的帮助/方向,将不胜感激,谢谢。
我已经设置了三个类,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;
}
}
'Thread.run',好笑话(我猜?)。 – fabian
谢谢,但即使通过线程扩展我的ScriptRunner类并使用从它继承的睡眠之后,我在页面上执行的Javascript命令仍然成批处理。我认为你是对的,它是导致应用程序挂起的线程,只是不知道如何解决它。 –