【发布时间】:2016-03-28 16:00:34
【问题描述】:
我在处理 Javafx 中的 WebView 时遇到了问题。 我的任务管理器中的内存使用量超出了一切,并以崩溃告终。
我有一个简单的代码示例来重现问题:
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class WebViewSample extends Application {
public boolean cycle = false;
public static void main(String[] args) {
launch();
}
@Override public void start(Stage primaryStage) {
WebView webView = new WebView();
WebEngine engine = webView.getEngine();
engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends Worker.State> obs, Worker.State old, Worker.State current) {
if(javafx.concurrent.Worker.State.SUCCEEDED == current) {
if(cycle) {
engine.load("http://www.google.com");
} else {
engine.load("http://www.yahoo.com");
}
cycle = !cycle;
}
}
});
engine.load("http://www.google.com");
primaryStage.setScene(new Scene(webView));
primaryStage.show();
}
}
所以基本上代码只是交替加载两个网站!我的问题不仅仅是这两个页面,在我的主程序中加载所有不同的 URL。但这也会重现问题。
到目前为止我已经尝试过:
- 调用 System.gc()
- 构建 URLStreamHandlerFactory 以防止图像加载
- 调用engine.getHistory().setMaxSize(0)
- 我用 visualvm 监控了进程 - 发现内存使用并没有爆炸
- engine.load("about:blank") 加载页面之间
- 谷歌搜索 3 天,找到任何解决方案
如果这是因为我的示例中的错误,我真的不知道,我错过了什么或自然的事情......
很高兴有任何帮助,谢谢!
- Java 1.8.0_77
【问题讨论】:
标签: javafx webview out-of-memory