Solución:
Siguiendo la guía de introducción, estos son los pasos necesarios para ejecutar JavaFX 11 desde Eclipse.
-
Instale Eclipse 2018-09 desde aquí.
-
Instale JDK 11 desde aquí.
-
Agregue Java 11 como un JRE instalado a Eclipse: Eclipse -> Ventana -> Preferencias -> Java -> JRE instalados -> Agregar.
-
Descarga JavaFX 11 ea desde aquí.
-
Cree una biblioteca de usuario: Eclipse -> Ventana -> Preferencias -> Java -> Ruta de compilación -> Bibliotecas de usuario -> Nuevo. Nómbrelo JavaFX11 e incluya los archivos jar en la carpeta lib de JavaFX 11-ea.
-
Crea un proyecto Java. No es necesario agregar una clase de ruta de módulo. Asegúrese de seleccionar Java 11 y agregar la biblioteca JavaFX11 a la ruta del módulo del proyecto.
-
Agregar un paquete
javafx11
y la clase de aplicación principalHelloFX
:
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 debería quejarse de las clases JavaFX, ya que hemos incluido la biblioteca de usuario.
-
Agregue argumentos en tiempo de ejecución. Edite la configuración de ejecución del proyecto y agregue estos argumentos de VM:
–module-path C: Usuarios
Descargas javafx-sdk-11 lib –add-modules = javafx.controls -
Finalmente, ejecute el proyecto. Debería funcionar bien.
Me gustaría compartir mis hallazgos sobre el lanzamiento de una aplicación javafx 11. Estoy hablando de una aplicación javafx heredada existente desarrollada originalmente sin módulos (por ejemplo, con Java 8).
La forma más interesante de la OMI es Método # 2b a continuación, que requiere el mínimo de cambios, es decir, no necesita -module-path
argumento. Menciono que estoy usando maven, así que cf. 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 iniciar, encontré varias opciones:
1a) Ejecutar 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 la consola puede ejecutar mvn exec:java
, y esto debería iniciar la aplicación. Maven se encargará de agregar todas las entradas de classpath para ruta del módulo. Le recuerdo a la CTRL + ALT + T
acceso directo en Eclipse, que abre una ventana de terminal directamente en el IDE.
1b) Lanzamiento usando maven, pero como una configuración de lanzamiento de Eclipse
Haga clic derecho en el proyecto> Ejecutar como> Maven Build …. Entonces entra exec:java
en el Metas caja de texto. Ventaja sobre el método anterior: un poco más integrado a Eclipse. Y depuración sencilla. Solo necesita reiniciar la configuración de inicio en modo de depuración y eso es todo. ¿Puedo recordar que las configuraciones de lanzamiento de Eclipse se pueden almacenar como .launch
archivos directamente en el directorio del proyecto (repositorio), por lo que los colegas pueden compartirlos / reutilizarlos. Usa la última pestaña, Común, en el Editar configuración ventana.
2a) Lanzamiento 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 hace clic se crea una nueva configuración de lanzamiento; probablemente no funcionará, por lo que debe editarlo (por ejemplo, ** botón Ejecutar (con el icono Reproducir) en la barra de herramientas> Ejecutar configuraciones> seleccione el correspondiente a su clase. O CTRL + click
en él después de hacer clic en Jugar).
Luego agrega esto Argumentos> Argumentos de VM:
--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml
Entonces, el truco aquí fue usar el ${project_classpath}
variable. Porque de lo contrario, debería haber necesitado escribir exactamente la ruta hacia el jar javafx, que se encuentra en algún lugar de su .m2
repo. Hacer esto haría que la configuración de lanzamiento no fuera fácilmente reutilizable por los colegas.
2b) Lanzamiento usando Eclipse SIN especificar -module-path
Este es la pieza de resistencia, que encontré por error, después de aproximadamente 5 horas de Java 11 y módulos “divertidos”. Su aplicación puede funcionar de inmediato, sin tocar -module-path
. Las librerías javafx, por supuesto, aún deberán estar en su classpath (pero esto es manejado por mvn). los truco es (cf. this) que su aplicación principal NO DEBE extender Application
(p.ej MyApplication
debajo). Si este es tu caso, crea una nueva clase con un main()
función que hace, por ejemplo:
Application.launch(MyApplication.class);
NOTA
En mi caso (es decir, en Windows, con un JDK 8 predeterminado en el sistema), existe un problema conocido con respecto al inicio de javafx. La solución es agregar la siguiente VM arg: -Djava.library.path=C:
. Entonces, en realidad, para los 4 métodos descritos anteriormente, necesitaba agregar esto.
Tuve problemas con respecto a FXMLLoader
… No pudo encontrar la clase.
Resolví esto cambiando los argumentos mostrados arriba, para cargar todos módulos, no solo javafx.controls
:
--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH