javafx - JavaFX - WebEngine.executeScript() 中的看门狗定时器
问题描述
在以下代码中:
public void onButtonClick(ActionEvent actionEvent) {
webView.getEngine().getLoadWorker().
stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) {
if (newValue == Worker.State.SUCCEEDED)
webView.getEngine().executeScript("window.scrollTo(0,document.body.scrollHeight);");
}});
webView.getEngine().loadContent("some content");
}
这段代码工作得很好,问题是这一行:
webView.getEngine().executeScript("window.scrollTo(0, document.body.scrollHeight);");
正在创建一个无限循环线程,该线程在应用程序终止时不会终止,因此产生此异常:
java.lang.IllegalThreadStateException
at java.lang.ThreadGroup.destroy (ThreadGroup.java:778)
at org.codehaus.mojo.exec.ExecJavaMojo.execute (ExecJavaMojo.java:328)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
我知道那一行是Thread
用 name产生这个的"Watchdog-Timer-1"
,因为如果不执行那一行,它就Thread
永远不会启动并且应用程序正常关闭。
任何想法为什么会发生这种情况?
解决方案
推荐阅读
- .net - 使用 Serilog JSON WriteTo 的命名属性来促进环境变量覆盖以禁用接收器
- c++ - 如何修复这个子类的初始化列表错误?
- java - 如何将字符串列表或整数列表从spring boot保存到elasticsearch
- ios - iOS 13 大标题直到滚动才可见
- c - 为什么我的代码没有多次测试?C中的for循环
- ruby - jRuby 1.7 和 ruby 9 中的 DataTime.parse.utc.to_s 输出
- reactjs - React 360 和 Cloud Firestore:尝试写入数据库时的状态为 400
- javascript - GetImageData 从无处返回一些随机零
- r - R文本挖掘:使用tm包中的stemDocuments对相似词进行分组
- python-3.x - Python 3 导数逼近错误与 loglog 图