2016-03-30 27 views
0

Ich bin sehr neu in JavaFX. Bevor ich anfing, es zu lernen, habe ich android für anderthalb Jahre programmiert. Jetzt habe ich eine einfache App mit einer einzelnen Szene und einer Listenansicht erstellt, aber es lief nicht gut. Das Problem ist, dass die Codeausführung angehalten wird, wenn die Szene angezeigt wird, bis ich diese Szene schließe. Ich habe die Sitzungsfactory des Hibernate innerhalb der main() -Methode meines mains initialisiert, aber das Programm kommt erst hinein, wenn ich die Szene schließe. Ich initialisiere die Szene wie folgt:JavaFX nicht innerhalb main() -Methode

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

Woher weiß ich, dass das Programm nicht in die Hauptmethode gelangt? Ich habe einen Haltepunkt hineingesteckt und es hat nur daran halt gemacht, als ich das Fenster (Szene) geschlossen habe. Außerdem werden alle Initialisierungsprotokolle für den Ruhezustand nur angezeigt, wenn ich sie schließe.

UPDATE: Main-Methode

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

Können Sie Ihre 'main()' zur Frage hinzufügen? – ItachiUchiha

+1

Ich bin nicht so vertraut mit JavaFX, aber ich denke, es hat eine EDT ähnlich wie Swing. Daher sollte alles, was nicht direkt Teil des Ereignisbehandlungs-/Rendering-Prozesses der Benutzeroberfläche ist (z. B. Ihre Hibernate-Initialisierung), vor dem Starten der Benutzeroberfläche oder in einem separaten Thread ausgeführt werden. – Thomas

+2

Zeigen Sie uns die Methode main(). Wenn Sie 'launch()' vor Ihrem Hibernate-Code aufrufen, wird 'launch()' erst wieder angezeigt, wenn die Benutzeroberfläche geschlossen wurde. –

Antwort

1

Anstelle der Hauptmethode, Sie eines der initializer methods in java, wie diese Instanz initializer verwenden können:

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

oder einen statischen Initialisierer:

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

der Unterschied zwischen ihnen wird auf der angegebenen Verbindung ausführlich erklärt, aber kurz verstehe ich sie auf diese Weise: statische Initialisierer wird verwendet, um statische Mitglieder und Instanzinitialisierer für Isantanzvariablen zu initiieren.

+0

danke für die Idee! Ja, ich bin vertraut mit Initializern, werde versuchen, sie zu benutzen! –

Verwandte Themen