2017-06-06 3 views
-1

Verwenden von HostServices.Versuch, einen Link zum Öffnen zu implementieren, wenn auf ein Menüeintrag geklickt wird, aber ein Fehler angezeigt wird

Ich bin mit dem Konstruktor

HostServices services = this.getHostServices(); 

ich es mit dem folgenden Menüpunkt arbeiten möchten, so dass, wenn dieser Menüpunkt wird geklickt sollte einen Link zu dem Web-Browser öffnen ... das Stück Code ich möchte das Objekt Dienste arbeiten ist

MenuItem fbMenuItem = new MenuItem("Facebook Page"); 
    fbMenuItem.setId("fbMenuItem"); 
    fbMenuItem.setOnAction(event -> { 
     services.showDocument("facebook.com"); 
    }); 

ich die

importiert haben

die mit HostServices arbeiten soll aber ich erhalte eine Fehlermeldung erhalten, die

Caesar.java:359: error: cannot find symbol 
    HostServices services = this.getHostServices(); 
           ^
symbol: method getHostServices() 
1 error 

sagt Aber wenn ich gleiche Prozedur mit einem normalen Button versuchen, die nicht in einem menuBar ist es funktioniert gut, aber wenn ich Verwenden Sie diesen Trick oben auf dem MenüBar gibt mir immer noch das Fehler

+1

[getHostServices() ist eine Methode der Anwendung] (http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#getHos tDienstleistungen--). Sie können this.getHostServices() nur in einer Klasse aufrufen, die Application erweitert. – VGR

+0

OK, dann wie kann ich eine Art von Link-Schaltfläche, die beim Klicken öffnet einen Webbrowser, aber diese Schaltfläche wird in einer Menüleiste als Menü-Element – Fule

+0

Sie könnten ein HostServices-Objekt an den Konstruktor Ihrer übergeben 'Caesar' Klasse. – VGR

Antwort

0

Eine Möglichkeit, dies zu behandeln, ist ein Singleton zu erstellen, um diese Arten von Referenzen zu halten und dann instanziieren, dass während der Anwendung starten.

Zum Beispiel:

public class HostServiceWrapper { 
    private static HostServiceWrapper _instance; 
    private HostServices hostServices; 

    private HostServiceWrapper (HostServices hostServices) { 
     // Do not allow this to be created externally 
     if (hostServices == null) { 
      throw new RuntimeException("Host services can't be null to instantiate this method"); 
     } 
     this.hostServices = hostServices; 
    } 

    public static void createInstance(HostServices hostServices) { 
     if (_instance == null) { 
      _instance = new HostServiceWrapper (hostServices); 
     } 
    } 

    public static HostServiceWrapper getInstance() { 
     if (_instance== null) { 
      throw new RuntimeException("HostServiceWrapper has not been correctly instantiated."); 
     } 
     return _instance; 
    } 

    public void openURL(String url) { 
     hostServices.showDocument(url); 
    } 

} 

dann in Ihrer Anwendung Startmethode würden Sie so etwas tun ...

public void start(Stage primaryStage) throws Exception { 
    ..... 
    HostServiceWrapper.createInstance(getHostServices()); 
} 

Dann, wo Sie es zugreifen müssen ....

HostServiceWrapper.getInstance().openURL("http://www.google.com"); 
+0

Ok wird versuchen und Feedback geben – Fule

Verwandte Themen