2016-11-20 11 views
0

Utilityクラスというstaticメソッドを作成しようとしていますが、私のステージで簡単にシーンを切り替えることができます。これは私が使用しようとしたコードです:切り替えシーンのJavaFXに関する問題

public class Utility { 
    public static void switchScene(String path) { 
     Stage stage = getMainStage(); // Assume this returns the primary stage 
     FXMLLoader loader = new FXMLLoader(); 
     loader.setLocation(getClass().getResource(path)); 

     try { 
      Parent root = loader.load(); 
      Controller controller = loader.getController(); 
      controller.start(); 
      Scene scene = new Scene(root); 
      stage.setScene(scene); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

私は(私は私のビューのためのすべてのコントローラはそれにstart方法を持っているControllerインタフェースを実装して作ってるんだ。)このコードが動作するだろうと思った、しかし私が手このエラーメッセージ:

java: non-static method getClass() cannot be referenced from a static context 

これを回避するには何かできますか?

答えて

1

String

Utility.switchScene(SomeClass.class.getResource("someView.fxml")); 

それはとは無関係です:今、それはかもしれどこ一人一人が自分のFXMLでそれを呼び出すことができますし、署名は引数がすることになっているものについてはあまり混乱してURL

に変更しますあなたの質問だけど、(Inversion of Control principle)関数を呼び出すのではなく、Stageを引数として、または依存性注入を介して取得し、キャッチするのではなくIOExceptionを投げることをお勧めします。また、voidを返すのではなく、Controllerを返すのは悪い考えではないと思うので、ユーザーが使用できるようにしてください。

+0

ありがとう、特に良い方法を使う上でのヒント! – saadq

+0

ようこそ。私はそれが助けてうれしいです。 – Omid

2

あなたはgetClass()static内部メソッドを呼び出したい場合は、クラス名と一緒にそれを使用する必要があるので、以下に示すように、あなたのコードを変更する必要があります。

loader.setLocation(Utility.class.getClass().getResource(path)); 
としてパスを取得しないでください
+0

ええと、間違いなくエラーは消えてしまいますが、それが好きではないようです。java.lang.IllegalStateException:場所が設定されていません。このコードを抽象化することはできませんこの別の 'ユーティリティ'クラス? – saadq

+0

'path'変数が正しく設定されていますか? – developer

関連する問題