gpt4 book ai didi

JavaFX WebEngine 卡在 "Running"状态

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:49 24 4
gpt4 key购买 nike

同时使用 WebEngine在 JavaFX2 中,我注意到它有时会卡住。假设我正在制作一个爬虫,它只是在页面上找到超链接,然后访问它们以递归地执行相同的操作,跟踪我们访问过哪些链接以及哪些链接已经在边界上。在运行我的代码时,执行有时会在任意时刻挂起。

我已经以 workDoneProperty 的监听器的形式向我的项目添加了一些调试代码。和 exceptionProperty并通过打印 loadWorker 的每个转换的 stateProperty .然后我注意到有时引擎会停止加载 URL(状态停留在 RUNNING 并且没有更多 workDone 更新)。我假设这是因为超时或其他原因,但我已经停止等待 5 分钟后是否确实超时。

exceptionProperty webEngine 似乎没有产生任何事件过渡到 FAILEDCANCELLED ,它就停止了。我想知道这是否可能是库中的竞争条件,或者我可能缺少某些东西......有没有人遇到过这个谁知道如何解决这个问题?对于我的应用程序来说,引擎不会随机停止是非常重要的...

编辑:从我的控制台添加输出:

Work done: -1
Engine Load Worker transitioning into state: READY
Work done: 0
Engine Load Worker transitioning into state: SCHEDULED
Engine Load Worker transitioning into state: RUNNING
Work done: 21
Work done: 24
Work done: 24
Work done: 57
Work done: 72
BUILD STOPPED (total time: 9 minutes 32 seconds)

最佳答案

我遇到了同样的问题。似乎是在我在一个方法中创建了一个本地“WebView”实例而没有保留对它的硬引用时发生的(因此在方法调用结束后 - 它可能是 GC-ed。)

我通过为我的 WebView 实例使用静态变量解决了这个问题(我在 JAVAFX 线程中初始化 - 否则我会得到一个异常)

private static WebView webview;
public static void someMethod() {


try {
if (webview == null){
webview = new WebView();
}
WebEngine webEngine = webview.getEngine();
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
public void changed(ObservableValue ov, State oldState, State newState) {
System.out.println("newState = " + newState);
if (newState == State.SUCCEEDED) {
System.out.println(webEngine.getLocation());
}
}
});
webEngine.load("http://javafx.com");
} catch (Exception ex) {
System.err.print("error " + ex.getMessage());
ex.printStackTrace();
}
}

关于JavaFX WebEngine 卡在 "Running"状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com