La biblioteca de implementación de JavaFX no se encuentra en JDK activo
netbeans java-11 (3)
Como @mipa señala, no necesita compilar ni Java 11 ni JavaFX 11 para migrar sus proyectos existentes.
En cuanto a Apache NetBeans 9.0, los archivos de compilación ant actuales para el proyecto JavaFX todavía no son compatibles con JavaFX 11. Siempre está buscando el jar de JavaFX, y se detendrá cuando no se encuentre. Esto es algo heredado de los viejos tiempos (antes de Java 8), cuando JavaFX no formaba parte del JDK y tenía que agregar el jar manualmente.
Por ejemplo, cuando intenta crear un nuevo proyecto JavaFX, obtendrá este error:
Pero esto no significa que no pueda ejecutar JavaFX 11, con o sin NetBeans 9.0.
Corriendo en la terminal
Puede ejecutar su proyecto Java / JavaFX 11 desde un terminal. Puede seguir esta guía de inicio para obtener un detallado paso a paso.
En pocas palabras, todo lo que necesitas es:
export PATH_TO_FX=/path/to/javafx-sdk-11/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX
donde
HelloFX.java
es:
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();
}
}
Proyecto modular
Cree un proyecto modular en NetBeans 9.0, y agregue un módulo (por simplicidad lo
javafx11
, que no es un nombre recomendado).
Antes de agregar el código, agreguemos la biblioteca JavaFX a la ruta del módulo.
Esta biblioteca es solo la carpeta bajo mi descarga local de JavaFX:
/Users/<user>/Downloads/javafx-sdk-11/lib/
.
Por supuesto, si lo construyó usted mismo, puede apuntar a esa ubicación en su lugar.
Ahora puedo definir el módulo:
module javafx11 {
requires javafx.controls;
exports javafx11;
}
y agregue la clase
HelloFX
anterior al paquete
javafx11
.
Ahora el proyecto se ejecutará perfectamente bien.
Incluso si todavía está utilizando
ant
, en este caso, los archivos de compilación se actualizan a los cambios de la ruta del módulo, y no hay nada específico de JavaFX, por lo que el proyecto se ejecuta sin problemas.
Proyecto java
Si el proyecto modular funciona, un proyecto Java normal también funcionará en NetBeans 9.0.
Cree un proyecto Java (de nuevo, no un proyecto JavaFX ), agregue la biblioteca JavaFX a la ruta del módulo como se indicó anteriormente, y ahora deberá agregar estas opciones de VM tanto para compilar como para ejecutar:
--module-path=/path/to/javafx-sdk-11/lib --add-modules=javafx.controls
El proyecto debería funcionar bien.
Maven
Otro enfoque es usar Maven o Gradle en lugar de hormigas.
Simplemente cree un proyecto Maven -> JavaFX, modifique el archivo pom.xml y agregue las dependencias de JavaFX:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11-ea+23</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11-ea+23</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>11</release>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.1.1</version>
<!-- Use newer version of ASM -->
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>javafx11.HelloFX</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Limpie, genere y ejecute desde NetBeans, debería funcionar bien.
Para Gradle, se puede hacer lo mismo, si incluye el complemento de Gradle para NetBeans.
Estoy migrando a OpenJDK 11 y OpenJFX 11. He creado exitosamente ambos desde la fuente, y según el wiki de OpenJFX usé el --with-import-modules = [path_to_modular_sdk] arg para construir el JDK. todo va bien hasta que intento construir un proyecto de prueba simple "Hello World" en Apache Netbeans 9; en este punto recibo el siguiente error: "La biblioteca de implementación de JavaFX no se encuentra en el JDK activo ". Intenté buscar información sobre esto pero no pude encontrar nada relevante. Si alguien pudiera arrojar luz sobre lo que está causando esto, lo apreciaría mucho. Gracias por cualquier ayuda. Patricio.
Es un problema con Netbeans 9. He usado el Sun JDK, ahora Oracle JDK durante muchos años con netbeans. En Netbeans 7.2 había una opción para agregar manualmente archivos JFX jar. Luego, JFX se integró en Oracle JDK8, y esa opción no está disponible ahora. Hace algunas semanas me informaron que Oracle JDK ya no será gratis el próximo año, así que comencé a migrar a Open JDK10 y tengo el mismo problema que tú. Esto se debe a que Open JFX no está integrado en Open JDK. Si prueba con Oracle JDK11, que ya es GA, no tendrá ningún problema al crear aplicaciones JFX. El problema es que cuando establece en NetBeans como plataforma Java un Open JDK, espera que JFX esté dentro del mismo JDK, pero Netbeans no le pedirá una carpeta JFX o algo así como en versiones anteriores.
Usted dice que está migrando a OpenJDK11 / OpenJFX11, pero ¿por qué comienza este esfuerzo construyendo el JDK y el JFX usted mismo? Sería mucho más fácil simplemente descargar una compilación de EA desde aquí http://jdk.java.net/11/ y aquí http://jdk.java.net/openjfx/ Además, comenzar con JDK11 JavaFX no es parte de la JDK más, por lo que se puede construir por separado del JDK. No estoy seguro de que sus instrucciones de compilación estén actualizadas.