Application.launch
всегда использует конструктор public
без параметров для создания экземпляра класса приложения для запуска. (Это не дает никаких преимуществ для создания экземпляра в основном методе BTW. Просто передайте класс без создания экземпляра, т.е. Application.launch(Test.class, args);
.)
Фактически вы можете только передать параметры String
в новый экземпляр класса вашего приложения без использования static
членов, и это делается с помощью параметра args
Application.launch
:
public class Client {
public static void main(String[] args) {
Application.launch(Test.class, "Pass this String to Constructor");
}
}
public class Test extends Application {
String str;
@Override
public init() {
this.str = getParameters().getRaw().get(0);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("No Main");
StackPane root = new StackPane();
root.getChildren().add(new Label("It worked!"));
primaryStage.setScene(new Scene(root, 300, 120));
primaryStage.show();
}
}
Обратите внимание, что доступ к свойству parameters
также возможен для метода start.
В JavaFX 9 появилась новая возможность: использовать Platform.startup
, но вам нужно самостоятельно обрабатывать жизненный цикл класса приложения:
Application app = new Test("Pass this String to Constructor");
app.init();
Platform.startup(() -> {
Stage stage = new Stage();
try {
app.start(stage);
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
});
Это неправильно вызывает метод Application.stop
. Также параметры не назначены.