Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

JavaFX — безыдейный HelloWorld

Anna | 4.06.2014 | нет комментариев
Изложение запуска HelloWorld из примера, предложенного Oracle в «Getting Started with JavaFX», но безыдейно, то есть, без IntelliJ IDEA и вообще какой-либо IDE. Реализовано на ПК с Windows. Опус относится к классу «Чайник — чайнику». Неожиданно оказалось, что для компиляции и запуска простейшего приложения из командной строки неудовлетворительно информации туториала, в котором приведен код этого приложения.

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

Спросите — для чего, собственно? Для обучения, как и все HelloWorld`ы. Не хочу умалять значения IDE и извещать: «Только блокнот! Только хардкор!» Но командная строка разрешает если и не осознать всю механику, то правда бы заглянуть под капот. Исключительно когда определенный навык программирования за еду теснее есть. Неожиданно появилось желание расширить горизонты и освоить, ну, возможен, Java. По крайней мере, испробовать.

Есть абсолютно восхитительный пост Работа с Java в командной строке от Qwertovsky. Все же, для последующего погружения маловато голой консоли, хочется окошек. Желанно, в виде десктопного приложения. Почитал, какие есть варианты создания GUI для Java-программ, и что о них думает народ, остановился пока на JavaFX. Оказалось, что на русском в различного рода интернетах про JFX написано достаточно немного, и значительной частью про первую версию. Значит, придется рыть на сайте Oracle.

jfxpub-overview уведомляет нам, что, от того что JavaFX-приложения пишутся на языке Java, я могу применять для их создания свой любимый редактор либо какую-нибудь IDE (NetBeans, Eclipse либо IntelliJ IDEA). Предлагается заглянуть на сайт www.oracle.com и скачать Oracle® JDK 7 с помощью JavaFX 2.2.n, а потом воспользоваться пособием jfxpub-get_started, Дабы сделать примитивное приложение, демонстрирующее работу со слоями, таблицами жанров и визуальными результатами. Еще там предлагается применять JavaFX Scene Builder для разработки пользовательского интерфейса без кодинга, но это как-нибудь потом.

Установлен JDK и (на каждый случай) JRE. У меня в системную переменную PATH само ничего не прописалось, и я вручную прописывать не стал.

Берем упомянутый пример как есть.

HelloWorld.java

package helloworld;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

Авторы пособия предлагают применять NetBeans IDE 7.3. Обойдемся. Делаем папку для плана, возможен, D:GetStart, в ней создаем папку для исходников src и папку для итогов компиляции out. Раз уж пробный класс относится к пакету helloworld, нужно сделать одноименную папку в src и положить туда файл HelloWorld.java.

Дабы это компилировалось, сделаем в корне плана файл compile.cmd. Так комфортнее вносить правки в команду компиляции — не нужно полагаться на память интерпретатора командной строки, и вообще, дозволено обойтись без cmd.exe, пользоваться любимым файловым администратором, а хоть бы и проводником.

jfxpub-overview рассказал, что JavaFX всецеловстроен в Java SE 7 JRE и JDK. На странице downloadsжелающим скачать JavaFX для Java SE 7 предлагают легко скачать Java SE 7. Среди файлов JDK нет javafxc и javafx. По каждой видимости, скомпилировать JFX-приложение дозволено так же, как и всякий иной java-файл. Следственно в командный файл запишем две строчки:

@"C:Program FilesJavajdk1.7.0_40binjavac" -d out srchelloworldHelloWorld.java
@pause

Вторая строчка дает вероятность разглядеть сообщения об ошибках. Если же в появившемся окне cmd.exe будет исключительное сообщение «Для продолжения нажмите всякую клавишу…», значит, предыдущая команда исполнена без ошибок.

Впрочем, запуск выдаст длинную простыню, которая, возможно, каждая даже не влезет в окно итога. 18 ошибок, что-то не обнаружено, что-то не существует. Дабы посмотреть все сообщения всецело, дозволено первую строчку CMD-файла дополнить перенаправлением потока итога ошибок в файл «2> result.txt».

Ошибки

srchelloworldHelloWorld.java:3: error: package javafx.application does not exist
import javafx.application.Application;
                         ^
srchelloworldHelloWorld.java:4: error: package javafx.event does not exist
import javafx.event.ActionEvent;
                   ^
...
  symbol:   class Scene
  location: class HelloWorld
srchelloworldHelloWorld.java:15: error: method does not override or implement a method from a supertype
	@Override
	^
18 errors

Компилятор не может обнаружить пакеты JFX. Нужно ему подсказать, а для этого нужно узнать самому. Может быть, я не дюже наблюдательно рылся, но на сайте Oracle не обнаружил, вернее, обнаружил только нафоруме. Желанный файл — jfxrt.jar (разумно — JavaFX Run Time), и он лежит в JRE, то есть, у меня, скажем, в C:Program FilesJavajre7lib и C:Program FilesJavajdk1.7.0_40jrelib. Добавим опцию -classpath:

@"C:Program FilesJavajdk1.7.0_40binjavac" -d out -classpath "C:Program FilesJavajre7libjfxrt.jar" srchelloworldHelloWorld.java
@pause

Сейчас компилируется. Создалась папка ./out/helloworld, и в ней файл HelloWorld.class. Если баловства ради в файле .java переименовать пакет в package HelloWorld, то и папка создастся в соответствующем регистре — ./out/HelloWorld, вот только приложение не запустится.

Хотелось бы запустить. В упомянутой теме на форуме Oracle предлагается вариант с упаковкой в jar, но испробуем вначале запустить так. Сделаем еще командный файл run.cmd с предварительно указанной библиотекой JFX:

@"C:Program FilesJavajdk1.7.0_40binjava" -classpath "C:Program FilesJavajre7libjfxrt.jar" helloworld.HelloWorld
@pause

При запуске получим ошибку:

Error: Could not find or load main class helloworld.HelloWorld

Ну что ж, значит, classpath еще маловат, нужно указать и место жительства нашего откомпилированного класса:

@"C:Program FilesJavajdk1.7.0_40binjava" -classpath "C:Program FilesJavajre7libjfxrt.jar;.out" helloworld.HelloWorld
@pause

Запуск этой команды наконец-то приведет к происхождению окошка с кнопкой с иллюстрации get_started. При этом будет видна и консоль cmd.exe. Нажатие на кнопку в окошке приведет к возникновению сообщения «Hello World!» в консоли.

Упаковать в jar все-таки хотелось бы. Воспользуемся утилитой javafxpackager. Запущенная в консоли без параметров, она выдает достаточно подробную и внятную справку по своим опциям. Дозволено сделать файл jar.cmd:

@"C:Program FilesJavajdk1.7.0_40binjavafxpackager" -createjar -appclass helloworld.HelloWorld -srcdir .out -outfile HelloWorld -v
@pause

Из проводника получившийся jar у меня запускается двойным щелчком мышки. Впрочем, файловый администратор заходит в данный файл, как в архив (коим файл, собственно, и является). Помимо того, в проводнике файл запускается без консоли. Следственно для комфорта я добавил еще и run_jar.cmd:

@"C:Program FilesJavajre7binjava.exe" -jar HelloWorld.jar
@pause

Работает!

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

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB