java javafx invocationtargetexception

obtener java.lang.reflect.InvocationTargetException al agregar un botón al diseño



javafx (1)

Por el error asumo que estás usando JavaFX 11 (o al menos JavaFX 9+). Tenga en cuenta que el problema final no es la excepción InvocationTargetException sino la IllegalAccessError :

Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x46b3f4cf) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x46b3f4cf

Esto le indica que el código en el "módulo sin nombre" está intentando acceder a las javafx.graphics internas del módulo javafx.graphics . Como esto no está permitido, se produce el error. Pero el verdadero problema aquí es que ControlHelper encuentra en el módulo sin nombre, pero se supone que debe estar en el módulo javafx.controls , si el nombre del paquete es algo a lo que ir. Este problema se debe a tener javafx.graphics en modulepath pero javafx.controls en classpath .

Asegúrese de tener ambos módulos (y javafx.base ) en el --module-path . Como su código no es modular (sin archivo de module-info ), también tendrá que indicarle al sistema del módulo que lo resuelva utilizando:

--add-modules javafx.controls

No tiene que incluir javafx.graphics en el --add-modules porque javafx.controls requiere javafx.graphics (y javafx.graphics requiere javafx.base ). Como todos los módulos están en la modulepath, se resolverán.

La forma en que configure estos comandos depende de cómo inicie su aplicación (por ejemplo, línea de comandos, IDE, Maven, Gradle, etc.).

Si alguna vez hace que su código sea modular, no necesitará usar el --add-modules , simplemente coloque las directivas apropiadas en su archivo de module-info . Por ejemplo:

module app { requires javafx.controls; }

Soy totalmente nuevo en javafx !! Probé un código muy simple y me quedé atascado. Cuando intenté agregar un botón al diseño, no funciona. Sé que esta pregunta puede ser demasiado simple pero realmente no sé cómo solucionarlo. Te agradecería si pudieras ayudarme. Este es mi código:

import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class Test extends Application{ Button button; public static void main(String[] args){ launch(args); } @Override public void start(Stage stage) throws Exception { stage.setTitle("Title"); StackPane layout = new StackPane(); button = new Button(); layout.getChildren().add(button); Scene scene = new Scene(layout); stage.setScene(scene); stage.show(); } }

y me salió el error:

Exception in Application start method java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051) Caused by: java.lang.RuntimeException: Exception in Application start method at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x46b3f4cf) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x46b3f4cf at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at javafx.scene.control.Control.<clinit>(Control.java:86) at Test.start(Test.java:21) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) at java.base/java.security.AccessController.doPrivileged(Native Method) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) ... 1 more Exception running application Test