Lassen Sie uns sagen, wir die folgende Klasse haben:Wie startet JavaFX 8 den JavaFX-Anwendungs-Thread in einer fast leeren Application-Klasse?
import javafx.application.Application;
import javafx.stage.Stage;
public class Test extends Application
{
public Test()
{
System.out.println("Constructor");
}
@Override
public void start(Stage primaryStage) throws Exception
{
System.out.println("start");
}
public static void main(String... args)
{
System.out.println("main");
}
}
Aus Application
abgeleitet ist, aber es ist nicht eine ihrer Methoden. Normalerweise starten Sie eine JavaFX-Anwendung, indem Sie im Wesentlichen launch(args)
aufrufen.
Wenn ich dieses Programm starte, ist die einzige Ausgabe "main", also werden der Konstruktor und der Start nicht aufgerufen, aber das Programm wird nicht beendet, weil ein JavaFX Application Thread läuft. Aber woher kommt es?
Ich habe ein Debugging durchgeführt und festgestellt, dass der Thread vom Hauptthread gestartet wird, bevor die Hauptmethode ausgeführt wird. Der Stack-Trace beginnt mit NativeMethodAccessorImpl
.
noch seltsamer Um: wenn ich die Haupt-Methode aus einer anderen Klasse starten, wird der JavaFX Anwendungsthread nicht gestartet:
public class Test2
{
public static void main(String[] args)
{
Test.main(args);
}
}
Also, was diese Art von schwarzer Magie ist?
Upvote für schwarze Magie. – GGrec
In der zweiten Klasse, Test2, haben Sie in Ihrer ursprünglichen Klassendeklaration keine erweiterte Anwendung hinzugefügt. Ihre Runtime hat also keine Ahnung, dass ein JavaFX-Prozess beteiligt ist - es könnte eine Hauptmethode (.) Einer anderen Art von Java-Klasse sein. – Trunk