Класс Application
- Прямые известные подклассы:
Preloader
public abstract class Application
extends Object Жизненный цикл
Точка входа для JavaFX-приложений — класс Application. При запуске приложения среда выполнения JavaFX выполняет следующие действия в указанном порядке:
- Запускает среду выполнения JavaFX, если она еще не запущена (см.
Platform.startup(Runnable)для получения дополнительной информации) - Создаёт экземпляр указанного класса Application
- Вызывает метод
init() - Вызывает метод
start(javafx.stage.Stage) - Ожидает завершения работы приложения, что происходит при наступлении одного из следующих условий:
- приложение вызывает
Platform.exit() - последнее окно закрыто и атрибут
implicitExitобъектаPlatformимеет значение true
- приложение вызывает
- Вызывает метод
stop()
Обратите внимание, что метод start является абстрактным и должен быть переопределён. Методы init и stop имеют конкретные реализации, которые ничего не делают.
Подкласс Application должен быть объявлен public и иметь public конструктор без аргументов.
Вызов Platform.exit() — предпочтительный способ явного завершения JavaFX-приложения. Прямой вызов System.exit(int) является допустимой альтернативой, но не позволяет методу Application stop() выполниться.
JavaFX-приложение не должно пытаться использовать JavaFX после завершения инструментария FX или из ShutdownHook, то есть после возвращения метода stop() или вызова System.exit(int).
Примечание: Классы JavaFX должны загружаться из набора модулей с именами javafx.* в пути модуля. Загрузка классов JavaFX из пути класса не поддерживается. См. Platform.startup для получения дополнительной информации.
Развёртывание приложения как модуля
Если подкласс Application находится в именованном модуле, то этот класс должен быть доступен модулю javafx.graphics. В противном случае при запуске приложения будет выброшено исключение. Это означает, что помимо объявления самого класса public, модуль должен export (или open) содержащий пакет по крайней мере модулю javafx.graphics.
Например, если com.foo.MyApplication находится в модуле foo.app, то модуль module-info.java может выглядеть так:
module foo.app {
exports com.foo to javafx.graphics;
} Параметры
Параметры приложения доступны, вызвав метод getParameters() из метода init() или в любое время после вызова метода init.
Потоки
JavaFX создаёт поток приложения для выполнения метода запуска приложения, обработки событий ввода и выполнения анимационных временных линий. Создание объектов JavaFX Scene и Stage, а также изменения операций с деревом сцены для живых объектов (объектов, уже присоединённых к сцене) должны выполняться в потоке JavaFX приложения.
Загрузчик Java загружает и инициализирует указанный класс Application в потоке JavaFX приложения. Если в классе Application нет метода main или если метод main вызывает Application.launch(), то экземпляр Application создаётся в потоке JavaFX приложения.
Метод init вызывается в потоке загрузчика, а не в потоке JavaFX приложения. Это означает, что приложение не должно создавать объект Scene или Stage в методе init. Приложение может создавать другие объекты JavaFX в методе init.
Все необработанные исключения в потоке JavaFX приложения, возникающие во время обработки событий, выполнения анимационных временных линий или любого другого кода, пересылаются обработчику необработанных исключений потока uncaught
exception handler.
Пример
Следующий пример продемонстрирует простое JavaFX-приложение.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
public class MyApp extends Application {
public void start(Stage stage) {
Circle circ = new Circle(40, 40, 30);
Group root = new Group(circ);
Scene scene = new Scene(root, 400, 300);
stage.setTitle("My JavaFX Application");
stage.setScene(scene);
stage.show();
}
}
Вышеприведённый пример произведёт следующее:
- С момента:
- JavaFX 2.0
- См. также:
Platform
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class | Application.Parameters | Содержит набор параметров для приложения. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static String | STYLESHEET_CASPIAN | Константа для пользовательского стиля CSS для темы "Caspian". |
static String | STYLESHEET_MODENA | Константа для пользовательского стиля CSS для темы "Modena". |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Application() | Создаёт новый экземпляр Application. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
HostServices | getHostServices() | Получает поставщик HostServices для этого приложения. |
Application.Parameters | getParameters() | Получает параметры для этого приложения, включая любые аргументы, переданные в командной строке. |
static String | getUserAgentStylesheet() | Получает пользовательский стиль CSS, используемый во всём приложении. |
void | init() | Метод инициализации приложения. |
static void | launch(Class<? extends Application> appClass,
String... args) | Запуск автономного приложения. |
static void | launch(String... args) | Запуск автономного приложения. |
void | notifyPreloader(Preloader.PreloaderNotification info) | Уведомляет предзагрузчик об уведомлении, сгенерированном приложением. |
static void | setUserAgentStylesheet(String url) | Устанавливает пользовательский стиль CSS, используемый во всём приложении. |
abstract void | start(Stage primaryStage) | Основная точка входа для всех приложений JavaFX. |
void | stop() | Этот метод вызывается, когда приложение должно завершиться, и предоставляет удобное место для подготовки к выходу приложения и уничтожения ресурсов. |
Подробное описание полей
STYLESHEET_CASPIAN
public static final String STYLESHEET_CASPIAN
- С:
- JavaFX 8.0
- См. также:
- Значения константных полей
STYLESHEET_MODENA
public static final String STYLESHEET_MODENA
- С:
- JavaFX 8.0
- См. также:
- Значения константных полей
Подробное описание конструкторов
Application
public Application()
Application экземпляр.Подробное описание методов
launch
public static void launch(Class<? extends Application> appClass, String... args)
main. Он не должен вызываться более одного раза, иначе будет выброшено исключение. Метод launch не возвращает значение, пока приложение не завершит работу, либо вызовом Platform.exit(), либо закрытием всех окон приложения. Класс, указанный аргументом appClass, должен быть публичным подклассом Application с публичным конструктором без аргументов в пакете, который exported (или open) по крайней мере для модуля javafx.graphics, иначе будет выброшено исключение RuntimeException.
Типичное использование:
public static void main(String[] args) {
Application.launch(MyApp.class, args);
}
где MyApp — подкласс Application.- Параметры:
-
appClass— класс приложения, который создаётся и выполняется загрузчиком. -
args— аргументы командной строки, передаваемые приложению. Приложение может получить эти параметры, используя методgetParameters(). - Исключения:
-
IllegalStateException— если этот метод вызывается более одного раза. -
IllegalStateException— если этот метод вызывается из потока приложения JavaFX. -
IllegalArgumentException— еслиappClassне является подклассомApplication. -
RuntimeException— если возникла ошибка при запуске среды выполнения JavaFX, или если класс приложения не может быть создан (например, если класс не является публичным или находится не в экспортированном пакете), или если в конструкторе, методе init, методе start или методе stop приложения брошено исключение или ошибка.
launch
public static void launch(String... args)
main. Он не должен вызываться более одного раза, иначе будет выброшено исключение. Это эквивалентно launch(TheClass.class, args), где TheClass — класс, непосредственно окружающий метод, который вызвал launch. Он должен быть публичным подклассом Application с публичным конструктором без аргументов в пакете, который exported (или open) по крайней мере для модуля javafx.graphics, иначе будет выброшено исключение RuntimeException. Метод launch не возвращает значение, пока приложение не завершит работу, либо вызовом Platform.exit(), либо закрытием всех окон приложения.
Типичное использование:
public static void main(String[] args) {
Application.launch(args);
}
- Параметры:
-
args— аргументы командной строки, передаваемые приложению. Приложение может получить эти параметры, используя методgetParameters(). - Исключения:
-
IllegalStateException— если этот метод вызывается более одного раза. -
IllegalStateException— если этот метод вызывается из потока приложения JavaFX. -
RuntimeException— если возникла ошибка при запуске среды выполнения JavaFX, или если класс приложения не может быть создан (например, если класс не является публичным или находится не в экспортированном пакете), или если в конструкторе, методе init, методе start или методе stop приложения брошено исключение или ошибка.
init
public void init() throws Exception
Реализация этого метода, предоставляемая классом Application, ничего не делает.
ПРИМЕЧАНИЕ: Этот метод не вызывается в потоке JavaFX Application. Приложение не должно создавать Scene или Stage в этом методе. Приложение может создать другие объекты JavaFX в этом методе.
- Исключения:
-
Exception— если что-то пошло не так
start
public abstract void start(Stage primaryStage) throws Exception
ПРИМЕЧАНИЕ: Этот метод вызывается в потоке JavaFX Application.
- Параметры:
-
primaryStage— главная сцена для этого приложения, на которую можно установить сцену приложения. Приложения могут создавать другие сцены, если это необходимо, но они не будут главными. - Исключения:
-
Exception— если что-то пошло не так
stop
public void stop() throws Exception
Реализация этого метода, предоставляемая классом Application, ничего не делает.
ПРИМЕЧАНИЕ: Этот метод вызывается в потоке JavaFX Application.
- Исключения:
-
Exception— если что-то пошло не так
getHostServices
public final HostServices getHostServices()
- Возвращает:
- поставщик HostServices
getParameters
public final Application.Parameters getParameters()
ПРИМЕЧАНИЕ: этот метод не должен вызываться из конструктора Application, так как он вернёт null. Его можно вызвать в методе init() или в любое время после него.
- Возвращает:
- параметры для этого приложения или null, если вызван из конструктора.
notifyPreloader
public final void notifyPreloader(Preloader.PreloaderNotification info)
Preloader.handleApplicationNotification. Это в первую очередь полезно в тех случаях, когда приложение хочет, чтобы загрузчик показывал прогресс во время длительной стадии инициализации приложения. ПРИМЕЧАНИЕ: уведомление будет передано только методу handleApplicationNotification() загрузчика; это означает, например, что если этот метод вызывается с ProgressNotification, это уведомление не будет передано в метод Preloader.handleProgressNotification.
- Параметры:
-
info— уведомление загрузчика, сгенерированное приложением
getUserAgentStylesheet
public static String getUserAgentStylesheet()
ПРИМЕЧАНИЕ: Этот метод должен вызываться в потоке JavaFX Application.
- Возвращает:
- URL таблицы стилей в виде строки.
- С:
- JavaFX 8.0
setUserAgentStylesheet
public static void setUserAgentStylesheet(String url)
-Djavafx.userAgentStylesheetUrl=[URL] Установка его в командной строке переопределяет всё, что задано с помощью этого метода в коде. URL — это иерархический URI вида [схема:][//авторитет][путь]. Если URL не содержит компонента [схема:], URL считается только компонентом [путь]. Любой начальный символ '/' в [пути] игнорируется, и [путь] обрабатывается как путь, относительный к корню пути класса приложения.
Кроме обработчиков протоколов, зарегистрированных для приложения, поддерживается схема URL «data» из RFC 2397. Если URL использует схему «data», а тип MIME пустой, «text/plain» или «text/css», содержимое будет интерпретироваться как файл CSS. Если тип MIME — «application/octet-stream», содержимое будет интерпретироваться как двоичный файл CSS (см. Stylesheet.convertToBinary(File, File)).
ПРИМЕЧАНИЕ: этот метод должен вызываться в потоке приложения JavaFX.
- Parameters:
-
url- URL стилизованного документа в виде строки. - Since:
- JavaFX 8.0
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.