JavaFX 다운로드 및 설치

JavaFX 다운로드 및 설치

JavaFX는 자바(Java) 기반으로 만들어진 오픈소스 차세대 클라이언트 애플리케이션 플랫폼이에요. 데스크톱, 모바일, 임베디드 시스템을 모두 지원하고, 자바가 지원하는 모든 기기에서 실행되는 GUI 애플리케이션을 설계할 수 있는 API를 제공해요. 이 튜토리얼에서는 운영체제별로 JavaFX를 설치하는 과정을 하나씩 차근차근 안내해 드릴게요.

출처: Download and Setup JavaFX

본문

JavaFX 다운로드

JavaFX는 독립적인 컴포넌트이며 Java Development Kit(JDK) 위에서 동작해요. 그래서 여러분이 사용하려는 JavaFX 버전과 호환되는 JDK를 먼저 설치해 두는 게 좋아요. 예를 들어 JavaFX 21을 쓰려면 JDK 21이 먼저 설치되어 있어야 해요. JDK 설치는 Getting Started with Java 튜토리얼의 setting up a Java Development Kit 섹션을 따라 해 보시면 돼요.

JavaFX와 JDK의 최신 버전을 항상 한눈에 확인할 수 있는 원스톱 페이지가 있어요: https://jdk.java.net/ 여기서 최신 "Ready for use" JavaFX 버전을 선택하면 필요한 JDK 버전을 다운로드할 수 있는 페이지로 이동해요. 이 페이지에서 JavaFX를 사용하는 방식을 선택할 수 있어요:

  • JavaFX를 SDK로 사용해서 JavaFX 애플리케이션을 컴파일하고 실행한다.
  • 일련의 jmod 파일이 담긴 아카이브를 다운로드해서 그 파일들을 jlink로 조합해 JavaFX 모듈을 포함한 JDK(선택적으로 모듈화된 애플리케이션까지)를 만든다.

운영체제에 맞는 JavaFX를 다운로드하면 돼요:

  • Linux/x64
  • macOS/x64
  • macOS/AArch64
  • Windows/x64

이 페이지에서 제공하는 JavaFX 빌드는 GNU General Public License version 2(Classpath Exception 적용)에 따라 배포되는 프로덕션 준비형 오픈소스 빌드예요.

Windows/x64용 JavaFX SDK 설정

Windows/x64용 JavaFX SDK를 사용하기로 했다면, 원하는 위치에 다운로드해서 압축을 풀어요. 이 섹션에서는 JavaFX 21.0.1을 사용할 거예요.

런타임의 lib 디렉터리를 가리키는 환경 변수를 추가해요:

set PATH_TO_FX="path\to\javafx-sdk-21.0.1\lib"

이제 명령줄에서 JavaFX 런타임을 사용해서 JavaFX 애플리케이션을 컴파일하고 실행할 수 있어요. 간단한 HelloWorldFX.java 클래스를 작성해서 확인해 볼게요:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorldFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello World running on JavaFX " + javafxVersion + " on top of Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

먼저 다음과 같이 컴파일해요:

javac --module-path %PATH_TO_FX% --add-modules javafx.controls HelloWorldFX.java

애플리케이션을 컴파일할 때는 필요한 모듈(javafx.controls)을 추가해야 해요. 이렇게 추가된 javafx.controls 모듈은 의존 관계에 따라 필요한 모듈(javafx.graphics)까지 함께 해결해 줘요.

이제 다음 명령으로 애플리케이션을 실행해요:

java --module-path %PATH_TO_FX% --add-modules javafx.controls HelloWorldFX

만약 애플리케이션이 FXML로 컴포넌트를 선언한다면, javacjava 호출 양쪽 모두에 javafx.fxml 모듈도 함께 추가해야 해요:

javac --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml HelloWorldFX.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml HelloWorldFX

Linux/x64용 JavaFX SDK 설정

Linux/x64용 JavaFX SDK를 사용하기로 했다면, 원하는 위치에 다운로드해서 압축을 풀어요. 이 섹션에서는 JavaFX 21.0.1을 사용할 거예요.

런타임의 lib 디렉터리를 가리키는 환경 변수를 추가해요:

export PATH_TO_FX=path/to/javafx-sdk-21.0.1/lib

이제 명령줄에서 JavaFX 런타임을 사용해서 JavaFX 애플리케이션을 컴파일하고 실행할 수 있어요. 간단한 HelloWorldFX.java 클래스를 작성해서 확인해 볼게요:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorldFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello World running on JavaFX " + javafxVersion + " on top of Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

먼저 다음과 같이 컴파일해요:

javac --module-path $PATH_TO_FX --add-modules javafx.controls HelloWorldFX.java

애플리케이션을 컴파일할 때는 필요한 모듈(javafx.controls)을 추가해야 해요. 이렇게 추가된 javafx.controls 모듈은 의존 관계에 따라 필요한 모듈(javafx.graphics)까지 함께 해결해 줘요.

이제 다음 명령으로 애플리케이션을 실행해요:

java --module-path $PATH_TO_FX --add-modules javafx.controls HelloWorldFX

만약 애플리케이션이 FXML로 컴포넌트를 선언한다면, javacjava 호출 양쪽 모두에 javafx.fxml 모듈도 함께 추가해야 해요:

javac --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloWorldFX.java
java --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloWorldFX

macOS용 JavaFX SDK 설정

macOS용 JavaFX SDK를 사용하기로 했다면, 원하는 위치에 다운로드해서 압축을 풀어요. 이 섹션에서는 JavaFX 21.0.1을 사용할 거예요.

런타임의 lib 디렉터리를 가리키는 환경 변수를 추가해요:

export PATH_TO_FX=path/to/javafx-sdk-21.0.1/lib

이제 명령줄에서 JavaFX 런타임을 사용해서 JavaFX 애플리케이션을 컴파일하고 실행할 수 있어요. 간단한 HelloWorldFX.java 클래스를 작성해서 확인해 볼게요:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorldFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello World running on JavaFX " + javafxVersion + " on top of Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

먼저 다음과 같이 컴파일해요:

javac --module-path $PATH_TO_FX --add-modules javafx.controls HelloWorldFX.java

애플리케이션을 컴파일할 때는 필요한 모듈(javafx.controls)을 추가해야 해요. 이렇게 추가된 javafx.controls 모듈은 의존 관계에 따라 필요한 모듈(javafx.graphics)까지 함께 해결해 줘요.

이제 다음 명령으로 애플리케이션을 실행해요:

java --module-path $PATH_TO_FX --add-modules javafx.controls HelloWorldFX

만약 애플리케이션이 FXML로 컴포넌트를 선언한다면, javacjava 호출 양쪽 모두에 javafx.fxml 모듈도 함께 추가해야 해요:

javac --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloWorldFX.java
java --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloWorldFX

JavaFX 런타임 이미지 다루기

JavaFX 릴리스 페이지에서 제공하는 jmod 파일 묶음을 사용해서 애플리케이션을 실행할 수도 있어요. 먼저 운영체제에 맞는 아카이브를 다운로드해요:

  • Linux/x64
  • macOS/x64
  • macOS/AArch64
  • Windows/x64

운영체제가 Linux/x64나 macOS라면 다운로드한 아카이브를 압축 해제하고, 결과로 생기는 jmods 디렉터리를 가리키는 환경 변수를 추가해요:

export PATH_TO_FX_JMODS=path/to/javafx-jmods-21.0.1

Windows 운영체제를 쓴다면 다운로드한 아카이브를 압축 해제하고, 결과로 생기는 jmods 디렉터리를 가리키는 환경 변수를 추가해요:

set PATH_TO_FX_JMODS="path\to\javafx-jmods-21.0.1"

jmod 파일 묶음을 사용하려면 HelloWorldFX.java 애플리케이션을 모듈의 일부로 만들어야 해요. 먼저 클래스에 패키지 선언을 추가해요:

package helloworld;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorldFX extends Application {

  @Override
  public void start(Stage stage) {
    String javaVersion = System.getProperty("java.version");
    String javafxVersion = System.getProperty("javafx.version");
    Label l = new Label("Hello World running on JavaFX " + javafxVersion + " on top of Java " + javaVersion + ".");
    Scene scene = new Scene(new StackPane(l), 640, 480);
    stage.setScene(scene);
    stage.show();
  }

  public static void main(String[] args) {
    launch();
  }

}

두 번째로, 애플리케이션을 실행하는 데 필요한 모듈을 선언하는 module-info.java를 만들어요:

module helloworldfx {
    requires javafx.controls;
    exports helloworld;
}

이제 JavaFX jmod 파일들로 HelloWorldFX.java 애플리케이션을 컴파일할 수 있어요:

  • Linux/x64, macOS/x64, macOS/AArch64용:
javac --module-path $PATH_TO_FX_JMODS -d mods/helloworldfx $(find . -name "*.java")
  • Windows용:
dir /s /b *.java > sources.txt & javac --module-path %PATH_TO_FX_JMODS% -d mods/helloworldfx @sources.txt & del sources.txt

helloworldfx는 모듈형 프로젝트이므로, JavaFX jmod를 사용해서 jlink로 커스텀 런타임 이미지를 만들 수 있어요:

  • Linux/x64, macOS/x64, macOS/AArch64에서:
$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_JMODS:mods --add-modules helloworldfx --output helloworldfx
  • Windows에서:
jlink --module-path "%PATH_TO_FX_JMODS%;mods" --add-modules helloworldfx --output helloworldfx

이미지가 만들어지면 다음 명령으로 실행할 수 있어요:

  • Linux/x64, macOS/x64, macOS/AArch64에서:
helloworldfx/bin/java -m helloworldfx/helloworld.HelloWorldFX
  • Windows에서:
helloworldfx\bin\java -m helloworldfx/helloworld.HelloWorldFX

마무리

이제 JavaFX를 성공적으로 다운로드하고 설치해서 사용하는 것까지 왔네요. 축하드려요!

참고로 알아두면 좋은 런타임 이야기가 하나 있어요. JDK 24부터는 네이티브 라이브러리를 로드하거나 링크하는 코드가 시작 시점에 명시적으로 네이티브 접근(native access)을 활성화해야 해요. 이 내용은 JEP 472에 명시되어 있어요. JDK 24에서 JavaFX 애플리케이션을 실행하면 네이티브 접근에 의존하는 세 개의 JavaFX 모듈(javafx.graphics, javafx.media, javafx.web)에서 경고가 발생해요. 각 경고에는 다음 메시지가 포함돼요:

WARNING: Restricted methods will be blocked in a future release unless native access is enabled.

경고를 없애고, 이후 버전의 JDK에서도 애플리케이션을 계속 실행하려면 네이티브 접근이 필요한 모든 모듈에 네이티브 접근을 명시적으로 활성화해야 해요:

# for the example in this tutorial
java --enable-native-access=javafx.graphics ...

# if your application uses all three JavaFX modules that rely on native access
java --enable-native-access=javafx.graphics,javafx.media,javafx.web ...

더 자세한 내용은 JavaFX Fundamentals 문서를 확인해 보세요.

더 알아보기 (Learn more)