JavaFX Swing浏览器非常慢

时间:2015-03-19 17:20:24

标签: java swing javafx javafx-8

我正在尝试调用类似JFrame的东西来使用O-Auth对用户进行身份验证。我实现了所有后台验证需求,使用默认的浏览调用进行测试:

Desktop.getDesktop().browse(java.net.URI.create(url));

使用默认浏览器,每个人都可以正常工作。 然后我尝试创建我的owh webview以在我的应用程序中调用。环顾四周,我找到了oracle实现Oracle JavaFX+Swing example。 Oracle实现可行,但速度很慢。我在eclipse中复制并粘贴了代码,并在java8下运行该类。

当我放弃Oracle示例时,我发现了这个: 这更快更干净但是当我拨打Application.launch(args);我的应用程序挂起时。

public class Test extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        StackPane root = new StackPane();

            WebView view = new WebView();
        WebEngine engine = view.getEngine();
        engine.load("http://www.google.com.br/");
        root.getChildren().add(view);

        Scene scene = new Scene(root, 800, 600);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) throws IOException {
        Application.launch(args);

    }
}

如果我可以在另一个帖子中调用Application.launch(args);,那就足够了。

如何从我的应用程序中调用简单的webView?

1 个答案:

答案 0 :(得分:1)

看起来性能问题是JavaFX 8u25和JavaFX 8u40的已知问题:

从我的测试来看,问题与WebView是在Swing中运行嵌入还是作为独立的JavaFX应用程序无关。如果WebView的宽度小于800像素,则Oracle页面将在大约六秒内完全加载和渲染,如果WebView的宽度超过800像素,则加载将花费超过30秒。此外,广泛的WebView仍然缓慢且无响应,您尝试与其进行交互,使其无法使用。

问题是特定于站点内容,因为如果将http://www.google.com.br/加载到大小为1024x768的WebView中,如果WebView是Swing包装或纯JavaFX应用程序并不重要 - 性能看起来相同(在大约2.5秒内完成加载)。测试系统是运行OS X 10.9和Java 8u40的Retina Mac。

该问题的目标是为Java 9修复(您可以尝试early access releases here)。该问题尚未被标记为Java 9已解决,因此可能仍在进行修复工作。

作为一种解决方法,请不要让WebView的大小超过800x600。

我不知道上面是你的确切问题,但可能是。可能看起来好像纯JavaFX应用程序比基于Swing的应用程序表现更好,因为纯JavaFX应用程序在(可能)不同内容上使用较小的WebView窗口。

如果您仍然需要为应用程序加载实际内容(而不是指向oracle或Google网站的内容),请提供mcve,这会导致您的内容出现问题

如果您的应用程序是Swing应用程序,那么您应该使用JFXPanel嵌入WebView(如Oracle SimpleSwingBrowser示例代码),而不是尝试从Swing应用程序中启动JavaFX应用程序。如果您的应用程序是JavaFX应用程序,那么就不需要多次启动JavaFX应用程序(并且JavaFX应用程序生命周期规则禁止这样做)。