对于JavaFX独立桌面应用程序,我使用hostservices.showDocument()在默认的Web浏览器中打开URL。但是在大多数情况下,如果我尝试使用此方法打开URL,则打开浏览器会花费很多时间(20-30秒)。是否存在与此相关的已知性能错误,或者有人有同样的问题?我没有awt.Desktop.getDesktop.browse()这个问题(浏览器会立即打开),但是我不想在JavaFX应用程序中使用AWT堆栈。

最佳答案

很难说您的应用程序哪里出错了,但这可能有助于单独研究问题。请尝试下面的完整示例,以帮助您隔离延迟。它在我的平台上打开的速度至少与Desktop#browse()一样快,即在一秒钟之内。

import javafx.application.Application;
import javafx.application.HostServices;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 * @see http://stackoverflow.com/a/37839898/230513
 */
public class Test extends Application {

    private final HostServices services = this.getHostServices();

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Test");
        Button button = new Button("Example");
        button.setOnAction((ActionEvent e) -> {
            services.showDocument("http://example.com/");
        });
        StackPane root = new StackPane();
        root.getChildren().add(button);
        Scene scene = new Scene(root, 320, 240);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}


附录:使用孤立的测试用例,@ Joey能够确定问题所在


确实发生在showDocument()上;直接访问浏览器不会发生。
确实发生在长网址上;短网址不会发生。
确实发生在一台计算机上;没有发生在其他人身上。


罪魁祸首似乎是GDA G Data InternetSecurity“行为分析代理”,avkbap64.exe,在here中进行了讨论。

10-08 13:38