java java-11 javafx-11

¿Cómo agregar el tiempo de ejecución de JavaFX a Eclipse en Java 11?



java-11 javafx-11 (4)

@ José Pereda tiene toda la razón, todo funciona como debería. Lo he probado con la versión 2018-12 de Eclipse. Entonces, después de descargar el IDE ( https://www.eclipse.org/downloads/packages/release/2018-12/r/eclipse-ide-java-developers ) e instalar el complemento e (fx) clipse, debe ser capaz de crear un elemento "Proyecto JavaFx" en su espacio de trabajo.

El siguiente paso es eliminar "JavaFX SDK" del módulo "Classpath" (Propiedades -> Java Build Path -> Libraries) y agregar la dependencia de Maven para eliminar los errores de compilación:

<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>11.0.1</version> </dependency>

El último paso es agregar un argumento de VM a "Ejecutar configuración" de su clase JavaFX para iniciar la aplicación (configuraciones de ejecución -> pestaña Argumentos -> argumentos de VM):

--module-path C:/path to the OpenJFX/javafx-sdk-11.0.1/lib --add-modules=javafx.controls

y debería funcionar después de ejecutarlo. Por supuesto, debe descargar el SDK de JavaFX antes de eso ( here ), descomprimirlo y usar la ruta a la carpeta "lib" en el argumento de VM mencionado anteriormente.

Recibo el siguiente error, ya que Java 11 excluyó el JavaFX como parte de la última versión.

Error: JavaFX runtime components are missing, and are required to run this application

Entonces, ¿cómo puedo agregar JavaFX a Eclipse en Java 11? Gracias.


Me gustaría compartir mis conclusiones sobre el lanzamiento de una aplicación javafx 11. Estoy hablando de una aplicación javafx heredada desarrollada originalmente sin módulos (p. Ej., Con Java 8).

La forma más interesante de IMO es el Método # 2b a continuación, que requiere el mínimo de cambios, es decir, no necesita el argumento -module-path . Menciono que estoy usando maven, así que cf. Las respuestas anteriores el primer paso es agregar una dependencia en su pom.xml hacia javafx. P.ej:

<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>11.0.2</version> </dependency>

Para lanzar, encontré varias opciones:

1a) Lanzamiento usando maven desde la línea de comando.

Configure en su pom.xml una sección como:

<build> <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>org.openjfx.hellofx.MainApp</mainClass> </configuration> </plugin> </plugins> </build>

Después de esto, desde una ventana de consola puede ejecutar mvn exec:java , y esto debería iniciar la aplicación. Maven se encargará de agregar todas las entradas de classpath a la ruta del módulo . Le recuerdo al acceso directo CTRL + ALT + T en Eclipse, que abre una ventana de terminal directamente en el IDE.

1b) Ejecutar utilizando maven, pero como configuración de inicio de Eclipse

Haga clic derecho en el proyecto> Ejecutar como> Maven Build .... Luego ingrese exec:java en el cuadro de texto Objetivos . Ventaja sobre el método anterior: un poco más integrado a Eclipse. Y fácil depuración. Solo necesitas reiniciar la configuración de inicio en el modo de depuración y eso es todo. .launch recordarles que las configuraciones de lanzamiento de Eclipse pueden almacenarse como archivos .launch directamente en el directorio del proyecto (repo), por lo que pueden compartirlos / reutilizarlos los colegas. Use la última pestaña, Común , en la ventana Editar configuración .

2a) Iniciar usando Eclipse y especificando -module-path usando una variable

Haga clic derecho en la clase principal> Ejecutar como> Aplicación Java . La primera vez que haga clic en una nueva configuración de lanzamiento se creará; probablemente no funcione, por lo que debe editarlo (por ejemplo, ** Botón Ejecutar (con el ícono Reproducir) en la barra de herramientas> Ejecutar configuraciones> seleccionar el correspondiente a su clase. O CTRL + click en él después de hacer clic en Reproducir ).

Luego agregue esto en Argumentos> Argumentos de VM :

--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml

Así que el truco aquí fue usar la variable ${project_classpath} . Porque de lo contrario, deberías haber tenido que escribir exactamente la ruta hacia el javafx jar, que está en algún lugar de tu repositorio .m2 . Hacer esto haría que la configuración de inicio no sea fácilmente reutilizable por los colegas.

2b) Ejecute utilizando Eclipse SIN especificar -module-path

Esta es la pieza de resistencia , que encontré por error, después de aproximadamente 5 horas de Java 11 y módulos "divertido". Su aplicación puede funcionar fuera de la caja, sin tocar -module-path . Por supuesto, las librerías de javafx todavía deberán estar en su ruta de clase (pero esto es manejado por mvn). El truco es (ver this ) que su aplicación principal NO DEBE extender la Application (por ejemplo, MyApplication continuación). Si este es tu caso, crea una nueva clase con una función main() que haga, por ejemplo:

Application.launch(MyApplication.class);

NOTA

En mi caso (es decir, en Windows, que tiene un JDK 8 predeterminado en el sistema), hay un problema conocido con respecto al lanzamiento de javafx. La solución es agregar el siguiente -Djava.library.path=C: VM: -Djava.library.path=C: Así que en realidad para los 4 métodos descritos anteriormente necesitaba agregar esto.


Siguiendo la guía de introducción , estos son los pasos necesarios para ejecutar JavaFX 11 desde Eclipse.

1 Instalar Eclipse 2018-09 desde here .

2 Instala JDK 11 desde here .

3 Agregue Java 11 como JRE instalado a Eclipse: Eclipse -> Ventana -> Preferencias -> Java -> JRE instalados -> Agregar.

4 Descarga JavaFX 11 ea desde here .

5 Crear una biblioteca de usuarios: Eclipse -> Ventana -> Preferencias -> Java -> Crear ruta -> Bibliotecas de usuarios -> Nuevo. Nómbrelo como JavaFX11 e incluir los archivos jar en la carpeta lib de JavaFX 11-ea.

6 Crea un proyecto Java. No es necesario agregar una clase de ruta de módulo. Asegúrese de seleccionar Java 11 y de agregar la biblioteca JavaFX11 a la ruta de módulo del proyecto.

7 Agregue un paquete javafx11 y la clase de aplicación principal HelloFX :

package javafx11; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class HelloFX extends Application { @Override public void start(Stage stage) { String version = System.getProperty("java.version"); Label l = new Label ("Hello, JavaFX 11, running on "+version); Scene scene = new Scene (new StackPane(l), 300, 200); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(); } }

Tenga en cuenta que el editor no debe quejarse de las clases de JavaFX, ya que hemos incluido la biblioteca de usuarios.

8 Añadir argumentos de tiempo de ejecución. Edite la configuración de ejecución del proyecto y agregue estos argumentos de VM:

--module-path C:/Users/<user>/Downloads/javafx-sdk-11/lib --add-modules=javafx.controls

9 Finalmente, ejecute el proyecto. Debería funcionar bien.


Tuve problemas con respecto a FXMLLoader ... No pude encontrar la clase.

Resolví esto cambiando los argumentos mostrados arriba, para cargar todos los módulos, no solo javafx.controls :

--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH