对于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中进行了讨论。