Explicamos cómo desarrollar una aplicación Java que utiliza GUI (entorno gráfico). Mostraremos cómo añadir una ventana (formulario) a nuestra aplicación, con componentes visuales (cuadros de texto, botones, etc.). Usaremos el IDE IntelliJ IDEA y la herramienta de diseño visual Scene Builder. Usaremos el tipo de aplicación JavaFX, sucesor de Swing para entorno gráfico en Java. Probaremos la aplicación resultante en diversos sistemas operativos: Windows, Linux y MAC OS.

¿Qué es JavaFX?

JavaFX es una familia de productos y tecnologías de Oracle, para la creación de aplicaciones web (RIA Rich Internet Applications). Se trata de aplicaciones web que tienen las características y capacidades de las aplicaciones de escritorio, incluyendo aplicaciones multimedia interactivas. Las tecnologías incluidas bajo la denominación JavaFX son JavaFX Script y JavaFX Mobile.

Las aplicaciones JavaFX pueden ser ejecutadas en una amplia variedad de dispositivos. En su versión actual permite crear aplicaciones de escritorio (para Windows, Linux, MAC OS), para smartphones, para Web, para televisores smart tv, consolas de videojuegos, reproductores Blu-ray, etc..

JavaFX es compilado a código Java, por lo que las aplicaciones JavaFX pueden ser ejecutadas en equipos con la máquina virtual de Java instalada (JRE), o teléfonos móviles que permitan Java ME.

Requisitos para desarrollar una aplicación JavaFX con GUI entorno gráfico en Java con IntelliJ y SceneBuilder

En primer lugar necesitaremos tener instalado en el quipo Java JDK en una versión igual o superior a la 8. Si no lo tenemos instalado lo descargaremos de la web oficial de Oracle, para el sistema operativo que estemos utilizando. En nuestro caso instalaremos el fichero jdk-8u271-windows-x64.exe para Windows x64. La instalación es bastante sencilla, con un asistente de instalación al que únicamente hay que darle a «Siguiente».

Para el diseño gráfico de los formularios (ventanas) usaremos SceneBuilder. En versiones anteriores de SceneBuilder y de IntelliJ IDEA había que instalar SceneBuilder, descargándolo de la web oficial e instalándolo en el equipo. Posteriormente en IntelliJ IDEA había que indicar dónde estaba el ejecutable de SceneBuilder:

Requisitos para desarrollar una aplicación JavaFX con GUI entorno gráfico en Java con IntelliJ y SceneBuilder

Pero en versiones actuales de IntelliJ IDEA 2020.2 y de JavaFX Scene Builder 11.0.0 ya no es necesario instalar SceneBuilder, como veremos a continuación. Directamente desde el IDE de IntelliJ IDEA nos dará la opción de instalar el plugin de SceneBuilder que se integrará perfectamente con el IDE. Esto lo veremos a continuación.

Por último, necesitaremos un IDE de desarrollo Java, en nuestro caso usaremos IntelliJ IDEA 2020.2, pero lo que explicaremos es muy similar para otros entornos como NetBeans o Eclipse.

Crear proyecto JavaFX y configurar IntelliJ para que use Scene Builder integrado

Abriremos IntelliJ IDEA para crear nuestro primer programa Java con entorno gráfico JavaFX. Pulsaremos en el menú «File» – «New» – «Project» y elegiremos «Java FX». En la parte derecha podemos elegir la versión de SDK que usaremos y tendremos marcado «JavaFX Application». Pulsaremos «Next»:

Crear proyecto JavaFX y configurar IntelliJ para que use Scene Builder integrado

Introduciremos el nombre para el proyecto, por ejemplo «Primera_Aplicacion_JavaFX» y la ubicación:

Crear proyecto JavaFX y configurar IntelliJ para que use Scene Builder integrado

El asistente para crear el proyecto JavaFX habrá creado un fichero de ejemplo llamado sample.fxml, lo abriremos desde «src» – «sample» – «sample.fxml» [1]. En la parte inferior pulsaremos en «Scene Builder» [2] y veremos que IntelliJ IDEA detecta que se trata de un fichero editable con Scene Builder, por lo que nos indicara de instalar el plugin «Scene Builder Kit». Pulsaremos en «Download Scene Builder Kit» [3] para que se instale automáticamente:

Crear proyecto JavaFX y configurar IntelliJ para que use Scene Builder integrado

Puede que también nos indice que hay que instalar JavaFX, de ser así pulsaremos en «Download JavaFX»:

Crear proyecto JavaFX y configurar IntelliJ para que use Scene Builder integrado

Si todo es correcto nos mostrará el diseñador gráfico de Scene Builder integrado en IntelliJ. Desde aquí podremos añadir los componentes visuales que queramos para nuestra ventana gráfica, como explicaremos a continuación.

Crear proyecto JavaFX y configurar IntelliJ para que use Scene Builder integrado

Diseñar un formulario (ventana) de prueba con IntelliJ y Scene Builder generando fichero .fxml

Procederemos ahora a crear un formulario de ejemplo en nuestra aplicación. Como hemos indicado anteriormente abriremos el fichero sample.fxml (por supuesto podemos crear los que queramos) y pulsaremos en «Scene Builder» en la parte inferior. Siempre tendremos la opción de ver el código XML del fichero (pulsando en «Text») o bien el modo de diseñador gráfico (pulsando en Scene Builder).

Diseñar un formulario (ventana) de prueba con IntelliJ y Scene Builder generando fichero .fxml

Añadiremos los siguientes elementos:

  • Un contenedor, un Pane.
  • Dentro del contenedor anterior, añadiremos:
    • Dos Label y dos TextField, para solicitar al usuario el nombre y los apellidos.
    • Tres Button para enviar los datos introducidos, limpiar los datos y salir del programa.

Todo ello se puede hacer de forma gráfica con Scene Builder:

Diseñar un formulario (ventana) de prueba con IntelliJ y Scene Builder generando fichero .fxml

Nombraremos los TextField y los Button, para luego poder usarlos y hacer referencia a ellos. Para nombrarlos pulsamos en el primer TextField, referente al Nombre y desplegaremos en la derecha la pestaña «Code». En fx:id introduciremos un nombre para el componente, por ejemplo txtNombre:

Diseñar un formulario (ventana) de prueba con IntelliJ y Scene Builder generando fichero .fxml

Repetiremos el proceso para el campo TextField de los apellidos, nombrándolos txtApellidos y para los Button, nombrándolos btLimpiar, btEnviar, btSalir.

Existen numerosas propiedades para cada control (componente) que podemos establecer tanto en el modo gráfico de Scene Builder como editando directamente el fichero .fxml que se genera. Cada componente tendrá sus propiedades, por ejemplo, los TextField: Promp Text, Text, Font, Editable, Alignement, Disable, Opacity, Node Orientation, Visible, Focus Traversable, Cache Shape, Center Shape, Scale Shape, Opaque Insets, Cursor, Effect, Accesible Text, Style, Stylesheets, id, Blend Mode, … y muchas más.

Una vez añadidos los componentes visuales y sus nombres identificativos podremos establecer los eventos de cada uno que queramos programar. Por ejemplo, los eventos clic de los tres botones, para asignar el código Java que ejecutará cada botón. Esto también podemos establecerlo desde Scene Builder, al menos el nombre de cada evento que irá asociado a cada control/componente. Para ello pulsaremos en el primer botón, el botón «Limpiar» [1]. En la parte derecha desplegaremos «Code» [2] y en «On Action» escribiremos un nombre para el evento click, por ejemplo «btLimpiarClick» [3]:

Diseñar un formulario (ventana) de prueba con IntelliJ y Scene Builder generando fichero .fxml

Repetiremos el proceso para el botón «Enviar» (btEnviarClick) y el botón «Salir» (btSalirClick).

Al igual que hemos comentado que existen multitud de propiedades para un componente (control), también existen multitud de eventos, cada componente tendrá los suyos, por ejemplo los Button: On Action, ON Drag Detected, On Drag Done, On Drag Dropped, on Drag Entered, On Drag Exited, On Drag Over, On Mouse Drag Entered, On Mouse Drag Exited, On Mouse Drag Over, On Mouse Drag Released, On Input Method Text Changed, On Key Pressed, On Mouse Clicked, On Mouse Dragged, On Scroll, On Rotate… y muchos más.

Una vez añadidos los componentes, establecidas sus propiedades y añadido el nombre de los eventos que queramos programar podemos ver el resultado en el fichero sample.fxml, pulsando en «Text» en la parte inferior:

Diseñar un formulario (ventana) de prueba con IntelliJ y Scene Builder generando fichero .fxml

Desde aquí también podemos modificar el formulario (ventana), aunque resultará mucho más complicado y hemos de tener conocimientos de XML y de composición de escenas para JavaFX. El fichero FXML resultante:

A continuación mostraremos cómo añadir código Java a cada evento.

Programar los eventos de los componentes visuales (Button)

Una vez que hemos añadido los componentes visuales, sus ID y sus eventos, es hora de programar lo que queramos que haga cada uno de ellos. En nuestro ejemplo, mostraremos una ventana para que el usuario introduzca el nombre y los apellidos. Una vez introducidos, cuando pulse en el botón «Enviar», mostrará los datos en un mensaje. Si pulsa en «Limpiar» borrará los datos introducidos y si pulsa el botón «Salir» cerrará la aplicación.

Abriremos el fichero que el asistente de IntelliJ ha creado, Controller.java, y añadiremos el siguiente código (está comentada cada línea):

Programar los eventos de los componentes visuales (Button)

En el código anterior hemos añadido a cada evento Click de cada botón su código correspondiente. En algunos casos, como se indica, se interactúa con los componentes visuales TextField, por ejemplo para obtener su contenido, para eliminarlo, o para cambiar el foco a alguno de ellos.

Clase principal Main, iniciar escena JavaFX al arrancar aplicación

Para iniciar el formulario que hemos diseñado, añadiremos el siguiente código Java en la clase Main de nuestra aplicación (Main.java):

Clase principal Main, iniciar escena JavaFX al arrancar aplicación

Compilando y probando aplicación con entorno visual GUI en IntelliJ IDEA con JavaFX

Compilaremos la aplicación y probaremos su funcionamiento. Para ello pulsaremos en el menú «Run» – «Run ‘Main'». En el caso en que no aparezca la opción «Run Main» deberemos pulsar en «Run…» y establecer la clase principal de la aplicación:

Compilando y probando aplicación con entorno visual GUI en IntelliJ IDEA con JavaFX

Si todo es correcto, se abrirá la ventana gráfica de nuestra aplicación:

Compilando y probando aplicación con entorno visual GUI en IntelliJ IDEA con JavaFX

Ahora podremos probar a introducir algún dato y pulsar en Enviar:

Compilando y probando aplicación con entorno visual GUI en IntelliJ IDEA con JavaFX

Vemos que la aplicación nos muestra en un mensaje el contenido de los campos Nombre y Apellidos introducidos por el usuario. Si pulsamos el botón Limpiar los campos se vaciarán y el foco pasará al campo «Nombre»:

Compilando y probando aplicación con entorno visual GUI en IntelliJ IDEA con JavaFX

Y si pulsamos en «Salir» nos solicitará confirmación para cerrar la aplicación:

Compilando y probando aplicación con entorno visual GUI en IntelliJ IDEA con JavaFX

Un ejemplo sencillo pero funcional. A continuación generaremos el JAR y lo probaremos en distintos sistemas operativos.

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Para generar el fichero JAR «ejecutable» de nuestra aplicación JavaFX con entorno gráfico pulsaremos en «File» – «Project Structure»:

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Seleccionaremos «Artifacts» [1] en «Project Settings», pulsaremos el botón «Add» [2], seleccionaremos «JavaFX Application» [3] y «From module ‘PrimeraAplicacion_JavaFX'» [4]:

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Pulsaremos en «Create Manifest…»:

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Seleccionaremos la carpeta donde se creará el archivo de manifiesto, por defecto en la del proyecto:

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Estableceremos el nombre de la clase principal en «Main Class», en nuestro caso: sample.Main (dado que estamos usando el package «sample»):

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

En la solapa «Java FX» podremos añadir todos los datos de la aplicación:

  • Application class: clase principal de la aplicación, en nuestr ocaso «sample.Main».
  • Title: título de la aplicación, por ejemplo «ProyectoA – Primera aplicación JavaFX».
  • Vendor: fabricante, desarrollador, por ejemplo «ProyectoA».
  • Description, version, width y height, parameters…
  • Application icon: icono de la aplicación para Windows (ico), Linux (png) y MAC OS (icns):
Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA
  • También podremos establecer el certificado de seguridad para que la aplicación pueda ejecutarse en entornos con nivel alto de seguridad Java.
Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Una vez establecidos todos los datos que consideremos pulsaremos en «OK» en la ventana anterior. Y estaremos preparados para generar el fichero JAR «ejecutable» de nuestra aplicación. Para ello pulsaremos en el menú «Build» – «Build Artifacts…»:

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Y en «Primera_Aplicacion_JavaFX» – «Build»:

Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Si todo es correcto, al general el JAR nos mostrará:

Executing pre-compile tasks…
Loading Ant Configuration…
Running Ant Tasks…
Running ‘before’ tasks
Checking sources
Building artifact ‘Primera_Aplicacion_JavaFX’…
Deleting outdated files…
Building artifact ‘Primera_Aplicacion_JavaFX’: copying files…
Building archives…
Building …/alonso/IdeaProjects/Primera_Aplicacion_JavaFX/out/artifacts/Primera_Aplicacion_JavaFX/Primera_Aplicacion_JavaFX.jar…
Copying archives…
Running post-processing tasks for ‘Primera_Aplicacion_JavaFX’ artifact…
Running ‘after’ tasks
Finished, saving caches…
Executing post-compile tasks…
Loading Ant Configuration…
Running Ant Tasks…
Synchronizing output directories…

En la carpeta /Primera_Aplicacion_JavaFX/out/artifacts/Primera_Aplicacion_JavaFX podremos comprobar que ha generado:

  • Primera_Aplicacion_JavaFX.html: web de ejemplo que contiene un enlace a la ejecución del fichero JNLP con Java Web Start para ejecutar el JAR.
  • Primera_Aplicacion_JavaFX.jar: JAR que contiene el fichero de manifiesto y los .class de la aplicación.
  • Primera_Aplicacion_JavaFX.jnlp: fichero JNLP que ejecuta el fichero JAR con Java Web Start.
Generar fichero ejecutable JAR de aplicación gráfica JavaFX en IntelliJ IDEA

Descarga del código fuente Java de la aplicación JavaFX de ejemplo

A continuación os dejamos el enlace para la descarga del proyecto completo de ejemplo con JavaFX, usando IntelliJ IDEA:

Nivel de seguridad en Java para ejecutar JNLP

Si intentamos ejecutar directamente el JNLP, que en realidad es como un acceso directo para ejecutar el JAR con Java Web Start, puede que funcione o puede que muestre este mensaje, indicando que el nivel de seguridad en la configuración de Java impide la ejecución de aplicaciones locales:

Nivel de seguridad en Java para ejecutar JNLP

En este caso puede que tengamos que agregar una excepción en la configuración de la seguridad de Java. En las últimas versiones ya no permite el nivel Medio ni bajo, solo Alto o Muy alto. Por lo tanto agregaremos la excepción correspondiente pulsando en «Editar lista de sitios…»:

Nivel de seguridad en Java para ejecutar JNLP

Introduciremos toda la URL de la ubicación del JAR y JNLP, en nuestro caso:

file:///C:/Users/alonso/IdeaProjects/Primera_Aplicacion_JavaFX/out/artifacts/Primera_Aplicacion_JavaFX/

Nivel de seguridad en Java para ejecutar JNLP

Nos advertirá de que es una ubicación local file://, pulsaremos en «Continuar»:

Nivel de seguridad en Java para ejecutar JNLP

Si intentamos ejecutar ahora el JNLP nos mostrará el siguiente aviso y nos ejará ejecutarlo pulsando en «Ejecutar»:

Nivel de seguridad en Java para ejecutar JNLP

Probando aplicación JavaFX con entorno gráfico en equipo Windows

Como siempre recordamos en la ejecución de aplicaciones Java, tendremos que disponer de una versión igual o superior de Java a la usada para la compilación. En nuestro caso, para probar la aplicación en un equipo con Windows Server 2012 y otro con Windows 10, solo hemos tenido que instalar jre-8u271-windows-x64.exe, descargado desde la web oficial de Java.

Recomendamos ejecutar la aplicación desde la línea de comandos, aunque sea una aplicación visual, dado que si produce algún error al ejecutarse, desde la línea de comandos nos lo mostrará. En cambio, si hacemos doble click sobre el JAR o el JNLP puede que no nos muestre el error.

Para ejecutar la aplicación abrimos una ventana de MS-DOS (línea de comandos o cmd.exe). Comprobaremos que Java está instalado y agregada a la variable de entorno PATH, para comprobarlo será suficiente con ejecutar el comando:

java -version

Que debe devolvernos la versión de Java instalada, en nuestro caso 1.8.0-271.

Accedemos a la carpeta donde se encuentre el JAR (es el único fichero necesario para la ejecución de la aplicación):

cd ProyectoA_JavaFX_W2012

Y la ejecutaremos con el comando:

java -jar Primera_Aplicacion_JavaFX.jar

Probando aplicación JavaFX con entorno gráfico en equipo Windows

Si todo es correcto se ejecutará y mostrará la ventana con los componentes visuales:

Probando aplicación JavaFX con entorno gráfico en equipo Windows

Además, como vemos en la imagen anterior, en la consola también muestra el texto introducido en los componentes visuales, como hemos indicado en el código Java para depuración.

En el caso de Java JRE 1.8.0-271 vemos que incluyen JavaFX, de lo contrario no habría funcionado la aplicación.

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Para la prueba usaremos un equipo con Linux Ubuntu 20.04.01. Abriremos una ventana de Terminal en el equipo Linux, para ello pulsaremos en el botón «Mostrar aplicaciones».

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Escribiremos «Terminal» en el buscador y pulsaremos en «Terminal»:

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Comprobaremos si tenemos Java con el comando:

java -version

Nos mostrará que no existe el comando «java» y nos dará la opción de instalar Java con varios comandos.

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Antes de continuar, hay que destacar que en Linux se suele usar OpenJDK o bien JRE, y en las últimas versiones no incluyen JavaFX, dado que se monta por separado con OpenJFX. Por lo tanto, aunque hemos instalado JRE con el comando

sudo apt install default-jre

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Una vez instalado Java JRE, volveremos a escribir el comando:

java -version

que ahora sí nos devolverá la versión de Java:

openjdk version 11.0.9 2020-10-20

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Pero la aplicación JAR no funcionará si intentamos ejecutarla. Accedemos a la carpeta donde tengamos el JAR:

cd /home/App_JavaFX_Ubuntu

y tratamos de ejecutarlo con el comando:

java -jar Primera_Aplicacion_JavaFX.jar

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Vemos que muestra un error poco descriptivo:

Error: no se ha encontrado o cargado la clase principal sample.Main
Causado por: java.lang.NoClassDefFountError: javafx/application/Application

Incluso aunque instalemos JDK 8 con el comando:

sudo apt install default-jdk

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Y lo establezcamos como la carjeta Java por defecto para usar con:

sudo update-alternatives –config java

Introduciendo el número correspondiente a la línea de la versión de Java que queramos usar:

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Tampoco ha funcionado la aplicación JAR JavaFX.

Incluso instalando JOpenFX (Java Open FX) con el comando:

sudo apt-get install openjfx-source

Tampoco ha funcionado.

Para conseguir que nuestra aplicación JAR JavaFX se ejecute en Ubuntu 20 hemos ejecutado los siguientes comandos para usar Java de Bell Soft:

wget -q -O – https://download.bell-sw.com/pki/GPG-KEY-bellsoft | sudo apt-key add –

echo «deb [arch=amd64] https://apt.bell-sw.com/ stable main» | sudo tee /etc/apt/sources.list.d/bellsoft.list

sudo apt-get update

sudo apt-get install bellsoft-java11-full

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Y para establecer esta versión de Java, que sí incluye JavaFX, ejecutaremos:

sudo update-alternatives –config java

Introduciendo un 2, en nuestro caso, para seleccionar /usr/lib/jvm/bellsoft-java11-full-amd64/bin/java:

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Ahora sí que funcionará perfectamente nuestro JAR con JavaFX. Para ejecutarlo accederemos a la carpeta donde tengamos el JAR:

cd /home/App_JavaFX_Ubuntu

y lo ejecutaremos con el comando:

java -jar Primera_Aplicacion_JavaFX.jar

Se iniciará la aplicación y mostrará la ventana y sus controles visuales, exactamente igual que en Windows:

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Incluso, una vez configurado Java, desde el modo gráfico, estableciendo el JAR como fichero ejecutable:

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Podremos hacer doble click sobre él, la primera vez puede que tengamos que elegir «Abrir con OpenJDK Java 11 Runtime»:

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Y se abrirá también nuestro formulario con los componentes visuales:

Probando aplicación JavaFX con entorno gráfico en equipo Linux Ubuntu 20

Probando aplicación JavaFX con entorno gráfico en equipo MAC OS

Algunos errores y su posible solución

  • Si intentamos ejecutar la aplicación JAR con una versión de Java inferior a la soportada nos mostrará este error:
Algunos errores y su posible solución

C:\WXP>java -jar Primera_Aplicacion_JavaFX.jar
Exception in thread «main» java.lang.UnsupportedClassVersionError: sample/Main :
Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: sample.Main. Program will exit.
C:\WXP>java -version
java version «1.6.0_29»
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)

Para solucionarlo solo tendremos que instalar la versión apropiada de Java (JRE) y debe incluir JavaFX.

  • En equipos Linux y Windows que tengan Java JRE o Java SDK pero no Java FX, al ejecutar el JAR mostrará el error:
Algunos errores y su posible solución

Error: no se ha encontrado o cargado la clase principal sample.Main
Causado por: java.lang.NoClassDefFountError: javafx/application/Application

En este caso el problema se soluciona como hemos indicando en la ejecución de la aplicación en Linux, instando un Java que incluya JavaFX, por ejemplo Liberica OpenJDK de BellSoft.