2016-06-15 19 views
1

Für eine eigenständige JavaFX-Desktopanwendung verwende ich hostservices.showDocument(), um URLs im Standardwebbrowser zu öffnen. Aber in den meisten Fällen, wenn ich versuche, URLs mit dieser Methode zu öffnen, dauert es sehr lange (20-30 Sekunden), bis der Browser geöffnet wird. Gibt es einen bekannten Performance-Fehler oder hat jemand das gleiche Problem? Ich habe dieses Problem nicht mit awt.Desktop.getDesktop.browse() (Browser öffnet sich sofort), aber ich möchte nicht AWT-Stack in einer JavaFX-Anwendung verwenden.JavaFX: hostservices.showDocument() schlechte Leistung

+2

Können Sie den Code, den Sie als Teil Ihrer Frage verwenden, bitte posten? – ManoDestra

+0

Interessant, wusste nicht, dass es eine FX-Klasse für den Internetzugang gab. Gibt es einen Grund, warum die Verwendung des "AWT-Stacks" ein Problem darstellt? – XaolingBao

Antwort

3

Es ist schwer zu sagen, wo Ihre Anwendung schief geht, aber es kann helfen, das Problem isoliert zu studieren. Probieren Sie das vollständige Beispiel aus, um die Latenz zu isolieren. Es öffnet mindestens so schnell wie Desktop#browse() auf meiner Plattform, d.h. innerhalb einer Sekunde.

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); 
    } 
} 

Nachtrag: Mit dem isolierten Testfall @Joey der Lage war, dass das Problem zu bestimmen

  • Hat mit showDocument() auftreten; tat nicht auftreten mit direktem Browserzugriff.

  • Haben mit langen URLs auftreten; did nicht auftreten mit kurzen URLs.

  • Sind auf einem Computer aufgetreten; tat nicht auftreten auf anderen.

Der Täter scheint GDA G Data Internetsecurity "Verhaltensanalyse-Proxy" avkbap64.exe, here diskutiert werden.

+0

Nicht auf meinem PC (Windows 10), aber was ich jetzt herausgefunden habe, ist, dass die URLs, die ich öffnen möchte, sehr lang sind. Wenn ich versuche, eine kurze URL wie http://amazon.de zu öffnen, ist die Eröffnung sehr schnell. Aber lange URL zum Beispiel "https://www.amazon.de/gp/product/B00N9O8NPS/ref=br_asw_pdt-5?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=24XXRB5870FJ9K6EYW51&pf_rd_t=36701&pf_rd_p=f174871c-54ea-44ff-a8bb-64ea261617fa & pf_rd_i = Desktop "dauert sehr lange wie ich beschrieben – Joey

+1

Ich habe den obigen Code auf meinem Computer (Windows 8.1, Standard-Browser ist Firefox) getestet und es hat gut funktioniert. Öffnet fast sofort mit der angegebenen URL und mit den beiden URLs, die vom OP im obigen Kommentar bereitgestellt wurden. – ManoDestra

+0

Scheint, ich bin der einzige mit diesem Problem. Vielleicht stimmt etwas mit meinem PC nicht. Aber was kann dieses Verhalten verursachen? – Joey