webprogr.ru Новости

RSS

{{toodo.preview}}

...
{{toodo.name}}

{{toodo.preview}}

далее..

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

смотреть..

toodo.name

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

перейти...

{{toodo.preview}}

...
{{toodo.name}}

{{toodo.preview}}

далее..

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

смотреть..

toodo.name

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

перейти...


Последние новости

Класс Application и жизненный цикл приложения

Все JavaFX-приложения имеют точку входа – класс, наследующий javafx.application.Application. Этот класс управляет жизненным циклом GUI-программы.
Жизненный цикл:
init() – выполняется один раз перед созданием GUI (инициализация, загрузка данных).
start(Stage primaryStage) – вызывается в UI-потоке, строит и показывает интерфейс в переданном окне.
stop() – вызывается при закрытии приложения, используется для освобождения ресурсов, сохранения состояния.
Запуск: Статический метод Application.launch() запускает JavaFX runtime, который последовательно вызывает init() → start(), а по завершении программы – stop().


Пояснение:
Чтобы приложение JavaFX заработало, необходимо определить класс, расширяющий Application. Обычно это делается так:
public class MyApp extends Application {
@Override
public void start(Stage primaryStage) {
// создание сцены, загрузка FXML, инициализация UI
primaryStage.setTitle("Пример");
primaryStage.setScene(new Scene(new StackPane(new Label("Hello, JavaFX!")), 300, 200));
primaryStage.show();
}
public static void main(String[] args) {
launch(args); // запускает JavaFX приложение
}
}
Когда вызван launch(args), JavaFX Runtime создаёт поток интерфейса и вызывает скрыто MyApp.init(), затем MyApp.start(primaryStage). В методе start(...) разработчик обязан как минимум установить сцену на переданный Stage и отобразить окно (show()). После выхода из метода start() приложение не завершается – продолжает работать цикл обработки событий JavaFX. Метод stop() будет автоматически вызван при закрытии последнего окна (обычно пользователем) или при вызове Platform.exit(). В stop() можно реализовать логику завершения: сохранить настройки, остановить фоновые потоки, закрыть соединения и т.п.
Заметим, что переопределять init() не обязательно – часто начальную логику инициализации можно выполнить и в start(). Однако init() полезен, если нужно подготовить данные до создания интерфейса (например, загрузить конфигурацию, подключиться к базе). init() выполняется в фоновом потоке (Launcher thread), а start() – уже в JavaFX Application Thread, где разрешено работать с UI. Поэтому трудоёмкие операции лучше делать в init(), чтобы они не задерживали запуск окна.
Современные практики также подразумевают возможность запуска JavaFX-приложения без наследования от Application – например, используя класс javafx.application.Platform и вручную создавая Stage. Но стандартный и рекомендуемый подход – всё же создание подкласса Application, поскольку он инкапсулирует весь цикл жизни. Кроме того, фреймворки (вроде Spring Boot с JavaFX) обычно ожидают, что вы запускаете именно Application.launch для интеграции.
Важно помнить, что метод main() (с вызовом launch) необходим, если вы собираете приложение в исполняемый JAR. В нем можно обрабатывать аргументы командной строки. Но если запускать через JavaFX runtime (например, в IDE), платформа может сама найти класс Application и запустить его без явного main.
Рейтинг@Mail.ru