What's Ahead?
This page contains will take you through the process of installing
Java 20 with an integrated javaFX SDK. Doing so eliminates a snarl of
classpath headaches and allows you to simply use javac
and java
for building and running JavaFX programs.
Step 1: Install SDKMAN!
Go to this site and do the install.
This piece of software makes managing your installed JDKs simple. It will
create a .sdkman
directory in your home directory. If you
install several SDKs, this program makes it easy to choose another SDK
as a default or to change to it temporarily.
Step 2: Get the right SDK.
Now do this in a command (cmd/powershell/terminal) window. You will see all of the
SDKs available to install. The unix>
you see is just a generic
system prompt.
unix> sdk list java ================================================================================ Available Java Versions for macOS ARM 64bit ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- Corretto | | 20.0.2 | amzn | | 20.0.2-amzn | | 20.0.1 | amzn | | 20.0.1-amzn | | 17.0.8 | amzn | | 17.0.8-amzn | | 17.0.7 | amzn | | 17.0.7-amzn | | 11.0.20 | amzn | | 11.0.20-amzn | | 11.0.19 | amzn | | 11.0.19-amzn | | 8.0.382 | amzn | | 8.0.382-amzn | | 8.0.372 | amzn | | 8.0.372-amzn Gluon | | 22.1.0.1.r17 | gln | | 22.1.0.1.r17-gln | | 22.1.0.1.r11 | gln | | 22.1.0.1.r11-gln GraalVM CE | | 20.0.2 | graalce | | 20.0.2-graalce | | 20.0.1 | graalce | | 20.0.1-graalce | | 17.0.8 | graalce | | 17.0.8-graalce | | 17.0.7 | graalce | | 17.0.7-graalce GraalVM Oracle| | 20.0.2 | graal | | 20.0.2-graal | | 20.0.1 | graal | | 20.0.1-graal | | 17.0.8 | graal | | 17.0.8-graal | | 17.0.7 | graal | | 17.0.7-graal Java.net | | 22.ea.13 | open | | 22.ea.13-open | | 22.ea.12 | open | | 22.ea.12-open | | 22.ea.11 | open | | 22.ea.11-open | | 22.ea.10 | open | | 22.ea.10-open | | 22.ea.9 | open | | 22.ea.9-open | | 22.ea.8 | open | | 22.ea.8-open | | 22.ea.7 | open | | 22.ea.7-open | | 22.ea.6 | open | | 22.ea.6-open | | 22.ea.5 | open | | 22.ea.5-open | | 22.ea.4 | open | | 22.ea.4-open | | 22.ea.3 | open | | 22.ea.3-open | | 21.ea.35 | open | | 21.ea.35-open | | 21.ea.34 | open | | 21.ea.34-open | | 21.ea.33 | open | | 21.ea.33-open | | 21.ea.32 | open | | 21.ea.32-open | | 21.ea.31 | open | | 21.ea.31-open | | 21.ea.30 | open | | 21.ea.30-open | | 21.ea.29 | open | | 21.ea.29-open | | 21.ea.28 | open | | 21.ea.28-open | | 20.0.2 | open | installed | 20.0.2-open JetBrains | | 17.0.8 | jbr | | 17.0.8-jbr | | 17.0.7 | jbr | | 17.0.7-jbr | | 11.0.14.1 | jbr | | 11.0.14.1-jbr Liberica | | 20.0.2.fx | librca | | 20.0.2.fx-librca | | 20.0.2 | librca | | 20.0.2-librca | | 20.0.1.fx | librca | | 20.0.1.fx-librca | | 20.0.1 | librca | | 20.0.1-librca | | 17.0.8.fx | librca | | 17.0.8.fx-librca | | 17.0.8.1.fx | librca | | 17.0.8.1.fx-librca | | 17.0.8.1 | librca | | 17.0.8.1-librca | | 17.0.8 | librca | | 17.0.8-librca | | 17.0.7.fx | librca | | 17.0.7.fx-librca | | 17.0.7 | librca | | 17.0.7-librca | | 17.0.1.fx | librca | local only | 17.0.1.fx-librca | | 11.0.20.fx | librca | | 11.0.20.fx-librca | | 11.0.20.1.fx | librca | | 11.0.20.1.fx-librca | | 11.0.20.1 | librca | | 11.0.20.1-librca | | 11.0.20 | librca | | 11.0.20-librca | | 11.0.19.fx | librca | | 11.0.19.fx-librca | | 11.0.19 | librca | | 11.0.19-librca | | 8.0.382.fx | librca | | 8.0.382.fx-librca | | 8.0.382 | librca | | 8.0.382-librca | | 8.0.372.fx | librca | | 8.0.372.fx-librca | | 8.0.372 | librca | | 8.0.372-librca Liberica NIK | | 23.r20 | nik | | 23.r20-nik | | 23.r17 | nik | | 23.r17-nik | | 23.0.1.r20 | nik | | 23.0.1.r20-nik | | 23.0.1.r17 | nik | | 23.0.1.r17-nik | | 22.3.3.r17 | nik | | 22.3.3.r17-nik | | 22.3.3.r11 | nik | | 22.3.3.r11-nik | | 22.3.2.r17 | nik | | 22.3.2.r17-nik | | 22.3.2.r11 | nik | | 22.3.2.r11-nik Microsoft | | 17.0.8.1 | ms | | 17.0.8.1-ms | | 17.0.8 | ms | | 17.0.8-ms | | 17.0.7 | ms | | 17.0.7-ms | | 11.0.20.1 | ms | | 11.0.20.1-ms | | 11.0.20 | ms | | 11.0.20-ms | | 11.0.19 | ms | | 11.0.19-ms Oracle | | 20.0.2 | oracle | | 20.0.2-oracle | | 20.0.1 | oracle | | 20.0.1-oracle | | 17.0.8 | oracle | | 17.0.8-oracle | | 17.0.7 | oracle | | 17.0.7-oracle SapMachine | | 20.0.2 | sapmchn | | 20.0.2-sapmchn | | 20.0.1 | sapmchn | | 20.0.1-sapmchn | | 17.0.8 | sapmchn | | 17.0.8-sapmchn | | 17.0.7 | sapmchn | | 17.0.7-sapmchn | | 11.0.20 | sapmchn | | 11.0.20-sapmchn | | 11.0.19 | sapmchn | | 11.0.19-sapmchn Temurin | | 20.0.2 | tem | | 20.0.2-tem | | 20.0.1 | tem | | 20.0.1-tem | | 17.0.8 | tem | | 17.0.8-tem | | 17.0.8.1 | tem | | 17.0.8.1-tem | | 17.0.7 | tem | | 17.0.7-tem | | 11.0.20 | tem | | 11.0.20-tem | | 11.0.20.1 | tem | | 11.0.20.1-tem | | 11.0.19 | tem | | 11.0.19-tem Tencent | | 17.0.8 | kona | | 17.0.8-kona | | 17.0.7 | kona | | 17.0.7-kona | | 11.0.20 | kona | | 11.0.20-kona | | 11.0.19 | kona | | 11.0.19-kona | | 8.0.382 | kona | | 8.0.382-kona | | 8.0.372 | kona | | 8.0.372-kona Zulu | | 20.0.2 | zulu | | 20.0.2-zulu | >>> | 20.0.2.fx | zulu | installed | 20.0.2.fx-zulu | | 20.0.1 | zulu | | 20.0.1-zulu | | 20.0.1.fx | zulu | | 20.0.1.fx-zulu | | 17.0.8 | zulu | | 17.0.8-zulu | | 17.0.8.fx | zulu | | 17.0.8.fx-zulu | | 17.0.7 | zulu | | 17.0.7-zulu | | 17.0.7.fx | zulu | | 17.0.7.fx-zulu | | 11.0.20 | zulu | | 11.0.20-zulu | | 11.0.20.fx | zulu | | 11.0.20.fx-zulu | | 11.0.19 | zulu | | 11.0.19-zulu | | 11.0.19.fx | zulu | | 11.0.19.fx-zulu | | 8.0.382 | zulu | | 8.0.382-zulu | | 8.0.382.fx | zulu | | 8.0.382.fx-zulu | | 8.0.372 | zulu | | 8.0.372-zulu | | 8.0.372.fx | zulu | | 8.0.372.fx-zulu ================================================================================ ================================================================================ Omit Identifier to install default version 17.0.8.1-tem: $ sdk install java Use TAB completion to discover available versions $ sdk install java [TAB] Or install a specific version by Identifier: $ sdk install java 17.0.8.1-tem Hit Q to exit this list view ================================================================================
This line shows you what I have installed.
| >>> | 20.0.2.fx | zulu | installed | 20.0.2.fx-zulu
Now install it with the command
unix> sdk install 20.0.2.fx-zulu
It will ask if you want this as your default; choose it.
Test Your Install
Download or copy this and place it in a file named TestFX.java
.
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
public class TestFX extends Application
{
GridPane gp;
@Override
public void init()
{
gp = new GridPane();
}
@Override
public void start(Stage primary)
{
Button goButton = new Button("Go");
Button quitButton = new Button("Quit");
gp.add(goButton, 0, 0);
gp.add(quitButton, 1, 0);
goButton.setOnAction( e ->
{
System.out.println("Going....");
});
quitButton.setOnAction( e ->
{
Platform.exit();
});
primary.setScene(new Scene(gp, 300, 300));
primary.show();
}
}
Now compile and run with these two commands.
unix> javac TestFX.java unix> java TestFX
This will pop up on your desktop. You are ready for the ewie gooey chewy world of JavaFX programming!
You will notice that, because your window is a child process of the terminal that spawned it, that the terminal is "busy" and there is no prompt. Click on the quit button in the JavaFX window to quit.