2017-06-06 5 views
-1

HostServicesを使用しています。メニューバーのアイテムがクリックされたがエラーが発生したときに開くリンクを実装しようとしています

私は... の作品を

HostServices services = this.getHostServices(); 

私はそのメニュー項目がクリックされたとき、それは、Webブラウザへのリンクを開く必要があるように、それは次のメニュー項目に仕事をしたい、コンストラクタを使用していますコード私が上で動作するオブジェクトサービスをしたいが、私は

をインポートした

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

ですHostServicesで動作するようになっているが、ときに私、私は

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

をというエラーを得続けるしかし、私はメニューバーにない通常のボタンと同じ手順をしようとすると、それが正常に動作しますが、

上のそのトリックをメニューバーで使用してください。それでもエラーが表示されます

+1

[getHostServices()はアプリケーションのメソッド](http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#getHos tServices--)。アプリケーションを拡張するクラスでのみthis.getHostServices()を呼び出すことができます。 – VGR

+0

[OK]をクリックすると、リンクボタンをクリックすると、クリックするとWebブラウザが開きますが、そのボタンはメニューバーのメニューアイテムとして配置されます。 – Fule

+0

HostServicesオブジェクトをコンストラクタに渡すことができます'Caesar'クラスです。 – VGR

答えて

0

これを処理する1つの方法は、これらの種類の参照を保持し、アプリケーションの起動時にインスタンス化するシングルトンを作成することです。例えば

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

} 

その後、あなたのアプリケーションの起動方法では、あなたがそれにアクセスする必要が続いて

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

.... ...このような何かをするだろう

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

Okはフィードバックを試みます – Fule

関連する問題