Категория: Руководства
Я написал последнюю часть данного учебника для того, чтобы показать вам, как развернуть (то есть упаковать и опубликовать) наше приложение AddressApp.
Часть 7: СодержаниеРазвёртывание - это процесс упаковки и доставки программного обеспечения пользователю. Это важная часть процесса разработки ПО, так как здесь происходит первый контакт пользователя с нашим приложением.
Для того, чтобы проиллюстрировать кроссплатформенное преимущество данного языка программирования, 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 - платформ-зависимая среда выполнения.
Для того, чтобы сделать процесс установки более комфортным для пользователя, мы предоставим ему установщик:
Плагин 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. Добавляем в установщик иконкиМы можем добавить в наш установщик пару красивых иконок:
Наша папка resources автоматически не будет скопирована автоматически. Мы должны вручную добавить её в папку build :
Шаг 4. Редактируем build.xml и включаем в него иконкиПлагин e(fx)clipse сгенерировал файл build/build.xml. который готов для выполнения Ant 'ом. Но пока наши иконки и изображения ресурсов работать не будут.
Пока (?) плагину e(fx)clipse нельзя указать, что нам необходимо включить дополнительные ресурсы, например папку resource и иконки, которые мы добавили ранее. Нам необходимо сделать это вручную путём редактирования build.xml :
Откройте build.xml и найдите тег <path id="fxant">. Добавьте одну строку для $
Ниже найдите блок кода 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, немного с запозданием ввиду отсутствия времени, но лучше поздно чем никогда.
Итак начем. В первой части я расскажу откуда скачать, как установить, и напишем и разберем наш первый как водится 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
чтобы можно было легко скопипастить и проверить если не верите то я приведу полный листинг этого простенького кода.
Топик получился немного сумбурным, прошу за это прощения, уже почти 5 давно не спал и голова уже не соображает. Надеюсь это кому-то когда-нибудь пригодится. Спасибо за внимание, жду критики.
Статья хорошая. Только я в начале ожидал увидеть плюсы использования JavaFX.
Все началось со 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
Евгений Корначев. потому что плохо получается. К железу (ОЗУ и ЦП) такие программы эталонно капризны, взять хоть эклипсы и нетбинсы, написанные на той самой Java.
Интерфейс получается не очень качественный, многих нужных контролов там нет, да и не только контролов ,но и прочего, что зависит от конкретной ОС, это уже проблема любого кроссплатформенного инструмента, и Java не исключение.
VZVZ. на счет качества интерфейса - не согласен. Весь стандартный набор контролов есть в коробке, есть куча других контролов в виде сторонних библиотек. А если вообще всё не нравится - используется webwiev - а в нем и html, и css, и javascript, и jquery и все что душе угодно. Интерфейс пишется в лёт.
А по поводу ОЗУ и ЦП - холивар. Потребление их - плата за скорость разработки и кроссплатформенность. Ровно по этой же причине нужно отказаться от декстопа на C#. А на С++ не нужно писать потому что долго и работать с памятью надо ручками. За все нужно платить, ровно так и в других языках.
Евгений Корначев. оспаривать суждения из вашего коммента мне не хочется, он весь состоит из незнания и неопытности.
Вы просто не знаете толком C# (будучи джавистом), вы не понимаете, что такое качественный интерфейс, что означает словосочетание "стандартный контрол", не имеете опыта с модульностью. Потому своего мнения у вас нет, все ваши суждения - как под копирку - слухи из интернета, которые однажды возникли и распространяются от человека к человеку, и почему-то считаются вами верными.
Вопрос к вам: для чего вы мне всё это пишете?
Вы хотите совершенствоваться, вас интересует мое мнение как профессионала с бОльшим опытом, чем у вас?
Или вы считаете себя уже состоявшимся спецом и пришли поучить меня?
Если второе, то я не хочу с вами дискутировать. Можете и дальше считать свой путь единственном верным, а все остальное - ересью, и всем пытаться это мировоззрение навязать. Конечно же, другим людям чужое мировоззрение нахер не нужно, у них другие пути, может они адекватные люди, а может и фанаты, но не жабы, а шарпа, в этом случае ваше мнение им тоже не нужно. Но что ж поделать, если вы ни на что более конструктивное не способны. Не перевоспитывать же мне вас насильно.
Во-первых, сначала нужно поиск тостера изучить, тут подобные вопросы по 5 шт. В день задают:-)
Изучать лучше Java EE, android, тут большинство денег:-) из предложенного актуально java FX, но надо подумать, стоит ли делать десктопные приложения на джаве и кому они будут шибко нужны.
JavaFX расширяет возможности Java, позволяя разработчикам использовать любые библиотеки Java в приложениях JavaFX. Таким образом разработчики получают доступ к расширенным возможностям Java и могут использовать технологию презентаций JavaFX, предназначенную для создания привлекательных визуальных образов. Пользователи смогут запускать приложения JavaFX в браузере или перетаскивать их на рабочий стол.
Обзор характеристик 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-приложений на настольных компьютерах и серверах.