Руководства, Инструкции, Бланки

руководство Javafx img-1

руководство Javafx

Категория: Руководства

Описание

Учебник по JavaFX 8 - Часть 7: Развёртывание

Учебник по JavaFX 8 - Часть 7: Развёртывание Скачать исходники
  • Часть 7 как проект Eclipse (Требуется хотя бы JDK 8u20)

Я написал последнюю часть данного учебника для того, чтобы показать вам, как развернуть (то есть упаковать и опубликовать) наше приложение AddressApp.

Часть 7: Содержание
  • Развёртывание нашего JavaFX-приложения в виде нативного пакета (Native Package ) с использованием плагина e(fx)clipse.
Что такое развёртывание

Развёртывание - это процесс упаковки и доставки программного обеспечения пользователю. Это важная часть процесса разработки ПО, так как здесь происходит первый контакт пользователя с нашим приложением.

Для того, чтобы проиллюстрировать кроссплатформенное преимущество данного языка программирования, Java рекламируется под слоганом "Написано однажды, работает везде". В идеале это означает, что наше Java-приложение сможет запуститься на любом устройстве, где установлена виртуальная машина Java (JVM).

В прошлом, пользовательский опыт от установки приложений Java не всегда был радостным. Если у пользователя в системе не была установлена требуемая версия Java, он перенаправлялся для её установки. Это приводило к некоторым трудностям, например, к необходимости обладать правами администратора, к возникновению вопросов совместимости версий Java, и прочему.

К счастью, JavaFX предоставляет новую возможность развёртывания, называемую "нативная упаковка" (Native Packaging ) (другое название - "Автономная упаковка приложения" (Self-Containde Application Package)). Нативный Пакет - это пакет, который вместе с приложением Java содержит и среду выполнения Java для конкретной платформы.

Официальная документация по JavaFX от Oracle содержит обширное руководство для всех возможных вариантов развёртывания приложений JavaFX .

В этой статье я покажу как создать "Нативную Пакет" с помощью приложения Eclipse и плагина e(fx)clipse .

Создание нативного пакета

Цель заключается в создании автономно-упакованного приложения, которое будет размещаться на компьютере пользователя в одной директории. То, как наше приложение будет примерно выглядеть в Windows можно посмотреть ниже:

В папке app лежат данные приложения, а в папке runtime - платформ-зависимая среда выполнения.

Для того, чтобы сделать процесс установки более комфортным для пользователя, мы предоставим ему установщик:

  • exe -установщик для Windows
  • dmg -установщик для MacOS.

Плагин e(fx)clipse поможет нам сгенерировать нативный пакет и установщик.

Шаг 1-й. Редактируем файл build.fxbuild

Файл build.fxbuild используется плагином e(fx)clipse для генерации файла, который в свою очередь будет использоваться инструментом сборки Ant. (Если у вас нет файла build.fxbuild. то создайте в Eclipse новый проект JavaFX и скопируйте оттуда сгенерированный файл).

Откройте файл build.fxbuild из корневой папки вашего проекта.

Заполните все поля, помеченные звёздочками. Для владельцев MacOS: не используйте пробелы в названии приложения (в поле Application Title ) так как это, похоже, приводит к проблемам).

Выберите формат упаковки: для Windows - exe. для MacOS - dmg. или Linux - rpm .

Проверьте, была ли создана папка build с файлом build.xml .

Шаг 2. Добавляем в установщик иконки

Мы можем добавить в наш установщик пару красивых иконок:

  • AddressApp.ico для иконки файла установщика
  • AddressApp-setup-icon.bmp для экрана приветствия установщика
  • AddressApp.icns - для установщика под MacOS
  • AddressApp-volume.icns для рабочего стола Mac
  1. Создайте в папке build следующие подкаталоги:
    • build/package/windows (используется только в Windows)
    • build/package/macosx (используется только в MacOS)
  2. Из приведенных ссылок загрузите соответствующие иконки и поместите их в назначенные для них папки. В результате это должно выглядеть так:
  3. Важно. Имена иконок должны точно соответствовать имени приложения, которое вы указали в build.fxbuild :
    • НазваниеВашегоПриложения.ico
    • НазваниеВашегоПриложения-setup-icon.bmp
    • НазваниеВашегоПриложения .icns
    • НазваниеВашегоПриложения-volume.icns
Шаг 3. Добавляем ресурсы

Наша папка resources автоматически не будет скопирована автоматически. Мы должны вручную добавить её в папку build :

Шаг 4. Редактируем build.xml и включаем в него иконки

Плагин e(fx)clipse сгенерировал файл build/build.xml. который готов для выполнения Ant 'ом. Но пока наши иконки и изображения ресурсов работать не будут.

Пока (?) плагину e(fx)clipse нельзя указать, что нам необходимо включить дополнительные ресурсы, например папку resource и иконки, которые мы добавили ранее. Нам необходимо сделать это вручную путём редактирования build.xml :

Откройте build.xml и найдите тег <path id="fxant">. Добавьте одну строку для $ (это сделает наши иконки доступными):

build.xml - добавляем "basedir"

Ниже найдите блок кода fx:resources id="appRes". Добавьте одну строку для наших ресурсов resources :

build.xml - добавляем "resources"

По какой-то причине номер версии не добавляется в fx:application. что всегда делает версию нашего установщика 1.0 (как указали несколько человек в комментариях). Для исправления этого, добавьте номер версии вручную (спасибо Марку, что выяснил это ):

build.xml - добавляем "version"

Теперь мы готовы запускать build.xml через Ant. Это сгенерирует нам исполняемый jar-файл проекта. Но мы хотим пойти на шаг дальше и создать хороший установщик.

Шаг 5. EXE-установщик под Windows

С помощью утилиты Inno Setup можно создать установщик нашей адресной книги для Windows в виде единого .exe -файла. Созданный .exe -установщик будет устанавливать программу на уровне пользователя (не потребуются права администратора). Также он создаст ярлык (в меню или на рабочем столе).

Скачайте Inno Setup версии 5 или выше. Установите Inno Setup на ваш компьютер. Наш Ant-скрипт будет использоваться для автоматической генерации установщика.

Укажите системе Windows путь к Inno Setup (например, C:\Program Files (x86)\Inno Setup 5 ). Для этого добавьте Inno Setup в переменную Path в переменных окружения системы. Если вы не знаете где их найти, почитайте Как установить пути и переменные окружения в Windows .

Перезапустите приложение Eclipse и продолжите с шага 6.

Шаг 5. DMG-установщик для MacOS

Для создания dmg -установщика под MacOS никаких дополнительных инструментов не потребуется.

Примечание: Для того, чтобы пользователь видел картинку установщика, следует назвать это изображение точно так же, как и наше приложение.

Шаг 5 (LINUX и другие). RPM-установщик для Linux

Для других способов упаковки приложения ( msi для Windows, rpm для Linux) читайте эту статью или документацию от Oracle .

Шаг 6 - Запускаем build.xml

На последнем этапе мы запустим файл build.xml с помощью Ant: кликните правой кнопкой мышки на файле build.xml | Run As | Ant Build .

Сборка приложения займёт какое-то время (около 1 минуты на моём компьютере).

Если всё прошло удачно, вы должны найти нативные сборки в папке build/deploy/bundles. Вот так выглядит версия для Windows:

Файл AddressApp-1.0.exe может использоваться как единственный файл для установки приложения. Этот установщик скопирует нашу сборку в папку C:/Users/[yourname]/AppData/Local/AddressApp .

Что дальше?

Надеюсь, что этот учебник поможет вам начать работать с JavaFX и с этого момента вы сможете писать собственные проекты JavaFX.

Я буду признателен любым отзывам. Если у вас есть какие-либо предложения, или если вам что-то не ясно, то не стесняйтесь писать комментарии.

Вам могут быть интересны также некоторые другие статьи

Другие статьи

JavaFX Доза первая

Java → JavaFX Доза первая

Как и обещал пишу первый топик посвященный изучению javaFX, немного с запозданием ввиду отсутствия времени, но лучше поздно чем никогда.
Итак начем. В первой части я расскажу откуда скачать, как установить, и напишем и разберем наш первый как водится helloWorld.

Пункт первый он же Установка всего необходимого
В зависимости от того какой IDE вы пользуетесь будут разные варианты. Я расскажу о двух вариантах, на примере двух самый популярных IDE для разработки Java это NetBeans и Eclipse.
Для NetBeans все ужасно просто, есть специальная сборка для JavaFX в которой уже есть все необходимое для работы. Скачать ее можно отсюда.
C Eclipse дело обстоит несколько хуже. Можно скачать плагин добавив репозиторий http://javafx.com/downloads/eclipse-plugin. затем нужно скачать саму SDK это можно сделать по той же ссылке что и для NetBeans, прописать путь к SDK в переменной окружения JAVAFX_HOME и после этих махинаций все должно работать, но увы, как я понял, этот плагин не адаптирован для javafx 1.2 поэтому весь ваш код будет подчеркиваться как сплошная ошибка, соответственно не будет работать авто комплит, но при этом будет нормально компилироваться. Я не стал углубляться в решении этой проблемы(пару часов погуглил, попробовал несколько плагинов, и нашел на форумах много аналогичных нерешенных проблем), а просто перешел на NetBeans (хотя конечно Eclipse для меня приятнее и привычнее). Ну я думаю на этом с первым пунктом разобрались.

Идем далее Пишем HelloWorld

После создания нового пустого проекта, в NetBeans уже будет создан некий начальный код, но его мы удалим и начнем писать с нуля.

для начала объявим две переменные которые будут у нас отвечать за размеры окна:

Сразу оговорюсь, что тип переменной var определяется в момент компиляции, а не во время исполнения. Создадим так же переменную

textField переменная хранит в себе объект TextBox — аналогичный JTextField. Мы задаем ей параметры: text — это содержимое текстового поля, colums — количество «ячеек»(видимых символов), a selectOnFocus это значит что не важно в фокусе этот элемент или нет при получении фокуса его содержимое будет выделено. welcomeText переменная типа Text мы ее определим позже, a переменная adnimation — экземпляр класса, который отвечает за анимацию поля welcomeText (мы написали node: bind welcomeText). Далее переходим к основному. понимаем следующую частичку кода:
Stage — это высокоуровневый контейнер для всех объектов которые есть в скрипте. В нашем случае (я запускаю скрипт как desktop application) это будет обычное окно. Так же мы задаем размеры этому окну и запрещаем менять размер.
Построение всего графического интерфейса в javafx постоено в виде дерева. Корнем его является класс Scene. У него есть большое количество атрибутов, но мы пока что воспользуемся только некоторыми.

fill — атрибут который отвечает за отрисовку фона. Мы его в данном случае заполним градиентом от светло-серого до черного сверху вниз (startX и startY это координаты начала отрисовки градиента, endX и endY его конца, принимают значения в процентах т.е. 0.5 — 50% т.е. середина).
Перейдем к самому интересному — добавлению контента.

Мы создаем группу отображения (Group — это ветвь которая содержит несколько дочерних ветвей). Атрибуты layoutX и layoutY — задаю абсолютное положение относительно левого верхнего угла родительского объекта. В javafx существует 2 layout menager`а это VBox и HBox которые соответственно отвечают за вертикальную и горизонтальную компоновку объектов. Мы делим всю рабочую область на 2 части.
В верхнюю мы добавляем Label (аналог обычного JLabel, к нему мы для красоты сопоставляем эффект Reflection — отражение), за ним идет наш textField и кнопка, которая будет обрабатывать собитие нажатия. Нижняя панель по-умолчанию пуста. После нажатия кнопки мы берем то что уже написано в textField (методом textField.text), добавляем это в сумбурный бредовый текст welcome.content = «some_text some_other_text», далее делаем этот объект видимым и запускаем анимацию (animation.playFromStart()). Конечно все это дело заключаем в if-else блок, чтобы проверить на пустоту ввода (если в поле ничего не ввели, то выключаем анимацию и скрываем поле). Должно получиться что-то вроде такого

чтобы можно было легко скопипастить и проверить если не верите то я приведу полный листинг этого простенького кода.


Топик получился немного сумбурным, прошу за это прощения, уже почти 5 давно не спал и голова уже не соображает. Надеюсь это кому-то когда-нибудь пригодится. Спасибо за внимание, жду критики.

Комментарии ( 5 )

Статья хорошая. Только я в начале ожидал увидеть плюсы использования JavaFX.

Как грамотно писать программы на JavaFX? Stack Overflow на русском

Все началось со Swing. Там вроде все понятно: создаешь классы, делаешь их взаимодействие, вешаешь слушателей на кнопки. Потом я решил быстро переписать программу на JavaFX.

Первом делом прочел 3 главы о JavaFX в книге Шилда "Java 8. Полной руководство". После этого начал читать "introducing javafx 8 programming" того же автора. Показалось, что управлять JavaFX примерно так же, как и Swing. НО. В процессе разработки возникает огромное множество вопросов, которых не было в Swing.

Например, почему в IntelliJ Idea есть пункт создания JavaFX-проекта, если можно любой класс унаследовать от Application. Как создавать приложения с использованием FXML. Как связан fxml-файл с моими классами. Чем собираются JavaFX - приложения. Стоит ли использовать SceneBuilder. Как пользоваться MVC моделью. Что вообще происходит ?

В общем, не смотря на поэму выше, вопрос простой - как правильно начать JavaFX проект и как его строить в дальнейшем, чтобы было минимум проблем. Есть ли какие-нибудь источники, которые смогут ответить на мои вопросы ?

задан 3 июн в 6:31

Что изучать новичку Swing, JavaFX, SWT?

Что изучать новичку Swing, JavaFX, SWT?

Евгений Корначев. потому что плохо получается. К железу (ОЗУ и ЦП) такие программы эталонно капризны, взять хоть эклипсы и нетбинсы, написанные на той самой Java.

Интерфейс получается не очень качественный, многих нужных контролов там нет, да и не только контролов ,но и прочего, что зависит от конкретной ОС, это уже проблема любого кроссплатформенного инструмента, и Java не исключение.

VZVZ. на счет качества интерфейса - не согласен. Весь стандартный набор контролов есть в коробке, есть куча других контролов в виде сторонних библиотек. А если вообще всё не нравится - используется webwiev - а в нем и html, и css, и javascript, и jquery и все что душе угодно. Интерфейс пишется в лёт.

А по поводу ОЗУ и ЦП - холивар. Потребление их - плата за скорость разработки и кроссплатформенность. Ровно по этой же причине нужно отказаться от декстопа на C#. А на С++ не нужно писать потому что долго и работать с памятью надо ручками. За все нужно платить, ровно так и в других языках.

Евгений Корначев. оспаривать суждения из вашего коммента мне не хочется, он весь состоит из незнания и неопытности.
Вы просто не знаете толком C# (будучи джавистом), вы не понимаете, что такое качественный интерфейс, что означает словосочетание "стандартный контрол", не имеете опыта с модульностью. Потому своего мнения у вас нет, все ваши суждения - как под копирку - слухи из интернета, которые однажды возникли и распространяются от человека к человеку, и почему-то считаются вами верными.

Вопрос к вам: для чего вы мне всё это пишете?
Вы хотите совершенствоваться, вас интересует мое мнение как профессионала с бОльшим опытом, чем у вас?
Или вы считаете себя уже состоявшимся спецом и пришли поучить меня?
Если второе, то я не хочу с вами дискутировать. Можете и дальше считать свой путь единственном верным, а все остальное - ересью, и всем пытаться это мировоззрение навязать. Конечно же, другим людям чужое мировоззрение нахер не нужно, у них другие пути, может они адекватные люди, а может и фанаты, но не жабы, а шарпа, в этом случае ваше мнение им тоже не нужно. Но что ж поделать, если вы ни на что более конструктивное не способны. Не перевоспитывать же мне вас насильно.

Во-первых, сначала нужно поиск тостера изучить, тут подобные вопросы по 5 шт. В день задают:-)
Изучать лучше Java EE, android, тут большинство денег:-) из предложенного актуально java FX, но надо подумать, стоит ли делать десктопные приложения на джаве и кому они будут шибко нужны.

Часто задаваемые вопросы о JavaFX

Общая информация о JavaFX

JavaFX расширяет возможности Java, позволяя разработчикам использовать любые библиотеки Java в приложениях JavaFX. Таким образом разработчики получают доступ к расширенным возможностям Java и могут использовать технологию презентаций JavaFX, предназначенную для создания привлекательных визуальных образов. Пользователи смогут запускать приложения JavaFX в браузере или перетаскивать их на рабочий стол.

Обзор характеристик JavaFX:
  • Позволяет разработчикам интегрировать веб-ресурсы векторной графики, анимации, аудио и видео в многофункциональные, интерактивные и реалистичные приложения
  • Расширяет возможности технологии Java, позволяя использовать любую библиотеку Java в приложении JavaFX
  • Позволяет организовать эффективный рабочий процесс на всех этапах от проектирования до разработки. При этом проектировщики могут самостоятельно выбирать инструменты для взаимодействия с разработчиками.

Дополнительные сведения о технологии JavaFX можно получить на веб-сайте JavaFX.

Данная страница содержит информацию, относящуюся к автономным версиям JavaFX от 2.0 до 2.2.7. Начиная с версии Java SE 7 Update 6, JavaFX является частью реализации Oracle Java SE.

Общие вопросы

JavaFX — программное обеспечение, которое в сочетании с Java позволяет создавать и развертывать современные приложения с форматированным содержимым, аудио и видео.

Нет. Для запуска приложений JavaFX на вашем компьютере должны быть установлены и среда исполнения Java Runtime Environment (JRE), и среда исполнения JavaFX Runtime.

Новейшая версия JavaFX содержит важные улучшения, позволяющие повысить производительность, стабильность и безопасность приложений JavaFX, запускаемых на вашем компьютере. Установка этого бесплатного пакета обновления обеспечит безопасную и эффективную работу приложений JavaFX, установленных на вашем компьютере.

JavaFX работает на Windows, Mac OS X и Linux. Дополнительные сведения можно найти в списке сертифицированных системных конфигураций JavaFX.

Да. JavaFX можно загрузить бесплатно.

Если вы конструируете встраиваемое или бытовое устройство и хотите включить в него Java или JavaFX, свяжитесь с компанией Oracle для получения подробной информации об интеграции этих технологий в ваше устройство.

После загрузки JavaFX пользователи получают JavaFX Runtime. JavaFX Runtime состоит из набора библиотек Java, обеспечивающих пользовательские интерфейсы современных стандартом, а также определенный рабочий код, позволяющий получить доступ к определенным аппаратным ресурсам (например, видеокарте). При загрузке JavaFX пользователи получают только то, что нужно им - без шпионского ПО и вирусов.

Распространение и лицензирование JavaFX (2.x и более ранние версии) Распространение JavaFX Могу ли я загрузить файлы JavaFX и скопировать их на другой компьютер?

Да. вы можете загрузить файлы среды исполнения JavaFX на один компьютер и скопировать эти файлы на другой компьютер при условии, что оба компьютера принадлежат вам.

Я — администратор. Могу ли я установить JavaFX на все компьютеры в моей компании?

Да. вы можете установить неограниченное количество копий для внутреннего использования с целью запуска Java-приложений на настольных компьютерах и серверах.

Могу ли я разместить файлы JavaFX в интрасети, чтобы их могли загрузить другие пользователи?

Да, вы можете разместить файлы JavaFX в интрасети для загрузки внутренними пользователями.

Могу ли я распространять JavaFX вместе с разработанным мной программным обеспечением?

Вы можете распространять JavaFX (версии 1.3.1, 2.0.2 и выше) со своим приложением в соответствии с положениями и условиями лицензии.

Лицензирование JavaFX Меняется ли лицензионное соглашение с каждым последующим выпуском?

Иногда. В каждом новом выпуске текст лицензионного соглашения может меняться. Базовые условия лицензии остаются неизменными, однако конкретные положения могут быть изменены с выходом новой версии без предварительного уведомления. Перед установкой каждой новой версии рекомендуется пересматривать содержание лицензионного соглашения.

Нужно ли мне приобретать лицензию, если я хочу установить JavaFX на компьютеры нескольких пользователей в моей компании?

Нет. вы можете создать неограниченное количество копий для внутреннего использования с целью запуска Java-приложений на настольных компьютерах и серверах.