I am running my JavaFX application like this:
public class MainEntry {
public static void main(String[] args) {
Controller controller = new Controller();
Application.launch(MainStage.class);
}
}
MainStage
class extends Appication
. Application.launch
starts my JavaFX window in a special FX-thread, but in my main method I don't even have an instance of my MainStage
class.
How to pass non-String parameter (controller in my case) to MainStage
instance? Is it a flawed design?
Starting with JavaFX 9 you can trigger the launch of the JavaFX platform "manually" using the public API. The only drawback is that the stop
method is not invoked the way it would be in application started via Application.launch
:
public class MainEntry {
public static void main(String[] args) {
Controller controller = new Controller();
final MainStage mainStage = new MainStage(controller);
mainStage.init();
Platform.startup(() -> {
// create primary stage
Stage stage = new Stage();
mainStage.start(stage);
});
}
}
The Runnable
passed to Platform.startup
is invoked on the JavaFX application thread.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With