Saltar al contenido

¿Cómo abrir un archivo JavaFX .jar con JDK 11?

Solución:

Siempre que tenga un proyecto JavaFX 11 simple (no modular) (sin las herramientas de compilación de Maven / Gradle) y esté utilizando IntelliJ, como la muestra de HelloFX de aquí, así es como puede crear un jar desde IntelliJ que se puede ejecutar desde la consola

Puede encontrar un tutorial completo sobre cómo ejecutar el proyecto aquí, y las instrucciones sobre cómo crear un jar están aquí (consulte la sección Proyecto no modular), pero estas no cubren Artifacts de IntelliJ.

Verifique que el proyecto HelloFX se ejecute desde IntelliJ con estas opciones de VM:

--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml

dónde PATH_TO_FX se ha establecido en File -> Settings -> Appearance & Behavior -> Path Variables, apuntando a la biblioteca JavaFX SDK.

Semi tarro de grasa

Podemos crear un Jar que solo contenga las clases del proyecto y dependencias de terceros, pero no las de JavaFX.

Ir a File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies, agregue su clase principal, acepte.

Luego eliminar los frascos de JavaFX de la lista y aceptar.

SemiJar

Construya el proyecto, creará un frasco bastante pequeño (3 KB en este caso).

Ahora debería poder ejecutarlo como:

java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar outartifactsHelloFX_jarHelloFX.jar

(Asegúrate de eso %PATH_TO_FX% apunta a una carpeta válida y usa comillas si contiene espacios.

Puede distribuir este jar y ejecutarlo en otras plataformas, siempre que estas también tengan el SDK de JavaFX.

Tarro de grasa

Si desea un jar completo que incluya dependencias de JavaFX, aún puede usar Artifacts.

Ir a File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies, agregue su clase principal, acepte.

Luego mantener los frascos de JavaFX de la lista y aceptar. Construye el proyecto.

En teoría, debería poder ejecutarlo como:

java -jar outartifactsHelloFX_jarHelloFX.jar

Pero esto no funcionará.

Razón 1: necesita una clase de iniciador, como se explica aquí.

Entonces crea una clase de lanzador:

public class Launcher {

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

Razón 2: si solo agrega sus tarros SDK al tarro gordo, se perderán las bibliotecas nativas, como se explica aquí.

Así que edite el artefacto, seleccione la clase Lanzador como clase principal y agregue las bibliotecas nativas (Directory Content -> path-to/JavaFX SDK/bin en Windows):

Tarro de grasa

Ahora compile el proyecto (ahora el jar tiene aproximadamente 33 MB y contiene bibliotecas nativas innecesarias) y ejecute:

java -jar outartifactsHelloFX_jarHelloFX.jar

Puede distribuir este jar, pero solo a plataformas Windows.

Puede crear archivos jar similares para otras plataformas, si descarga sus SDK de JavaFX, y también puede crear archivos jar multiplataforma si los agrega todos juntos, como se explica en las respuestas vinculadas arriba.

De todos modos, deberías considerar usar jlink en lugar de.

Nota

Acerca de este error:

Causado por: java.lang.ClassNotFoundException: Files Java javafx-sdk-11.0.1 lib

parece que la ruta de la biblioteca se estableció sin comillas y falta la primera parte de la ruta C:Program Files.... Solo asegúrate de usar comillas:

set PATH_TO_FX="C:Program FilesJavajavafx-sdk-11.0.1lib"

Tuve un problema similar al exportar / generar un Jar usando JavaFX e IntelliJ no modular con Gradle (https://openjfx.io/openjfx-docs/)

El jar que estaba generando usando el comando jar de Gradle no se ejecuta y arroja un error que dice que no puede encontrar mi clase principal. Cuando abrí mi frasco, pude ubicar mi clase principal. Entonces me di cuenta de que el error tiene que ver con Jar Packaging.

ingrese la descripción de la imagen aquí

Solucioné el problema agregando JavaFX SDK a mi Java SDk en IntelliJ como se muestra a continuación.

ingrese la descripción de la imagen aquí

Después de esto, utilizo el comando Gradle build Jar normal para generar mi archivo Jar (como se muestra a continuación) y se ejecuta normalmente.

ingrese la descripción de la imagen aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *