Статьи

Здравствуйте, JavaFX 2.0: Введение из командной строки

Я посмотрел на простую JavaFX- версию вездесущего примера Hello World с точки зрения бета-версии NetBeans 7.1 в блоге Hello JavaFX 2.0: Введение в бета-версию NetBeans 7.1 . В этой статье я рассмотрю немного другую версию Hello World, реализованную с использованием JavaFX с использованием только инструментов командной строки.
Документация по API JavaFX 2.0 включает описание класса для класса javafx.application.Application, и это хорошее место для начала. Документация Javadoc для класса Application предоставляет пример описания эффективного использования класса . Это описание класса описывает жизненный цикл приложения JavaFX и даже предоставляет пример кода с изображением, показывающим, как пример воспроизводится. Я буду работать над тем же образцом в этом посте.
Документация Javadoc класса Application описывает центральную роль этого класса: «Класс приложения, из которого расширяются приложения JavaFX». Метод start (Stage) наиболее интересен в классе Application, поскольку он является «основной точкой входа для всех приложений JavaFX». Это абстрактный метод, поэтому он должен быть переопределен путем расширения классов. В следующем листинге кода показана минимальная реализация, которая компилирует, но ничего не делает (в ней даже нет функции main ).

HelloWorld.java (I: Минимум голой)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
package dustin.examples;
 
import javafx.application.Application;
import javafx.stage.Stage;
 
/**
 * Simple JavaFX Hello World example.
 *
 * @author Dustin
 */
public class HelloWorld extends Application
{
   @Override
   public void start(final Stage stage) throws Exception
   {
      throw new UnsupportedOperationException("JavaFX example not supported yet.");
   }
}

В предыдущем фрагменте кода показан импорт двух классов JavaFX ( Application и Stage ). Когда приведенный выше код скомпилирован с использованием javac без размещения библиотек JavaFX в пути к классам, возникают ошибки, подобные следующим.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
HelloWorld.java:3: error: package javafx.application does not exist
import javafx.application.Application;
                         ^
HelloWorld.java:4: error: package javafx.stage does not exist
import javafx.stage.Stage;
                   ^
HelloWorld.java:11: error: cannot find symbol
public class HelloWorld extends Application
                                ^
  symbol: class Application
HelloWorld.java:14: error: cannot find symbol
   public void start(final Stage stage) throws Exception
                           ^
  symbol:   class Stage
  location: class HelloWorld
HelloWorld.java:13: error: method does not override or implement a method from a supertype
   @Override
   ^
5 errors

Очевидное решение — разместить подходящую библиотеку JavaFX на пути к классам компилятора. В моем случае JavaFX SDK и JAR, необходимые для создания этого кода, это C: \ Program Files \ Oracle \ JavaFX 2.0 SDK \ rt \ lib \ jfxrt.jar .

Следующий листинг кода основан на предыдущем фрагменте кода и адаптирован из примера, приведенного в документации Javadoc на уровне класса приложения .  

HelloWorld.java (II: адаптировано из Javadoc приложения)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package dustin.examples;
 
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
 
/**
 * Simple JavaFX Hello World example.
 *
 * @author Dustin
 */
public class HelloWorld extends Application
{
   @Override
   public void start(final Stage stage) throws Exception
   {
      final Circle circ = new Circle(40, 40, 30);
      final Group root = new Group(circ);
      final Scene scene = new Scene(root, 400, 300);
 
      stage.setTitle("Hello JavaFX 2.0!");
      stage.setScene(scene);
      stage.show();
   }
}

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

HelloWorld.java (III: добавлена ​​основная функция)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package dustin.examples;
 
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
 
/**
 * Simple JavaFX Hello World example.
 *
 * @author Dustin
 */
public class HelloWorld extends Application
{
   @Override
   public void start(final Stage stage) throws Exception
   {
      final Circle circ = new Circle(40, 40, 30);
      final Group root = new Group(circ);
      final Scene scene = new Scene(root, 400, 300);
 
      stage.setTitle("Hello JavaFX 2.0!");
      stage.setScene(scene);
      stage.show();
   }
 
   /**
    * Main function used to run JavaFX 2.0 example.
    *
    * @param arguments Command-line arguments: none expected.
    */
   public static void main(final String[] arguments)
   {
      Application.launch(arguments);
   }
}

В main функции требуется только одна строка. Эта строка является вызовом статического метода Application.launch (String…) с переданными ему аргументами командной строки. Это приложение теперь может быть выполнено и выглядит так, как показано на снимке экрана ниже.

Вывод
В этой записи блога было продемонстрировано написание и запуск простого приложения JavaFX с использованием только инструментов командной строки . Доказательство того, что JavaFX 2.0 вернул «Java» в JavaFX, примеры в этом посте были скомпилированы и выполнены с помощью типичного компилятора Java и средства запуска Java, используемого для «обычных» приложений Java. Более сложные приложения JavaFX могут извлечь выгоду из более специфических инструментов , но это было скомпилировано и выполнено исключительно с помощью стандартных инструментов Java.