Diciamo, abbiamo la seguente classe:In che modo JavaFX 8 avvia il thread JavaFX Application in una classe Application quasi vuota?
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");
}
}
E 'derivato da Application
ma non usa nessuno dei suoi metodi. Solitamente si avvia un'applicazione JavaFX chiamando lo launch(args)
nel main.
Quando avvio questo programma, l'unico output è "main", quindi il costruttore e l'avvio non vengono chiamati, ma il programma non termina perché è in esecuzione un thread JavaFX Application. Ma da dove viene?
Ho eseguito il debug e ho scoperto che il thread è stato avviato dal thread principale prima dell'esecuzione del metodo principale. La traccia dello stack inizia con NativeMethodAccessorImpl
.
Per ottenere risultati ancora più strano: quando inizio il metodo principale da una classe diversa, il filo JavaFX Application non viene avviato:
public class Test2
{
public static void main(String[] args)
{
Test.main(args);
}
}
Quindi, che tipo di magia nera è questo?
Upvote per magia nera. – GGrec
Nella seconda classe, Test2, non è stata aggiunta un'Applicazione nella dichiarazione della classe originale. Quindi il tuo runtime non ha alcuna idea che sia coinvolto un processo JavaFX - potrebbe essere un metodo principale (.) Di qualsiasi altro tipo di classe Java. – Trunk