我正在尝试调用类似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?
答案 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应用程序生命周期规则禁止这样做)。