2016-03-30 11 views
0

私はJavaFXの新機能です。私はそれを学ぶ前に、私は1年半のアンドロイドのプログラミングをしてきました。今、私は単一のシーンとリストビューで簡単なアプリを作ったが、うまくいかなかった。問題は、シーンが表示されているときに、このシーンを閉じるまでコードの実行が停止されていることです。私はメインクラスのmain()メソッド内で初期化しているhibernateのセッションファクトリを持っていますが、シーンを閉じるまではプログラマは内部には入りません。私はこのようなシーンを初期化します:JavaFXがmain()メソッドの内部に入らない

public class MyApp extends Application { 
    public void start(Stage stage) {    
     Group root = new Group(circ); 
     Scene scene = new Scene(root, 400, 300); 

     stage.setTitle("My JavaFX Application"); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 

メインメソッドの中にプログラマーが入っていないことをどのように知ることができますか?私はそれの中にブレークポイントを置くと、私はウィンドウ(シーン)を閉じたときにそれを停止しました。また、すべてのハイバネート初期化ログは、私がそれを閉じるだけで表示されます。

UPDATE:代わりに、mainメソッドの主な方法

public static void main(String[] args) { 
     launch(args); 
     try { 
      setUp(); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
      return; 
     } 
     databaseEventNotifier = DatabaseEventNotifier.getInstance(); 
     databaseEventNotifier.notifyListeners(); 
    } 
+1

質問に 'main()'を追加できますか? – ItachiUchiha

+1

私はJavaFXに慣れていませんが、Swingによく似たEDTを持っていると思います。したがって、UIイベントハンドリング/レンダリングプロセス(Hibernateの初期化など)に直接含まれないものは、UIを起動する前に、または別のスレッドで実行する必要があります。 – Thomas

+2

main()メソッドを表示します。あなたが休止状態のコードの前に 'launch()'を呼び出すと、 'launch()'はUIが閉じられるまで戻りません。 –

答えて

1

、あなたはこのインスタンス初期化子のように、initializer methods in javaのいずれかを使用できます。

public class MyApp extends Application { 
    { 
     // here you can initialize hibernate and other stuff before the start method 
    } 

    public void start(Stage stage) {    
     // ... your start method 
    } 
} 

またはこの静的初期化子:

public class MyApp extends Application { 
    static { 
     // here you can initialize hibernate and other stuff before the start method 
    } 

    public void start(Stage stage) {    
     // ... your start method 
    } 
} 

それらの間のリンクについては、提供されたリンクで詳細に説明していますが、このように理解しています。静的な初期化子は静的なメンバーを初期化し、インスタンス初期化子は等価変数に使用されます。

+0

アイデアをありがとう!ええ、私は初期化子によく慣れています、それらを使用しようとします! –

関連する問題