java.lang.NoSuchMethodException cuando intenta ejecutar la aplicación TornadoFX

No estoy seguro de lo que está causando que no encuentre la function "init" en mi View, así que pensé en publicar aquí y ver si alguien más tenía este problema.

Todo comstack bien! Y luego, cuando ejecuto mi progtwig, obtengo este error:

java.lang.InstantiationException: com.my.tfx.app.InputView at java.lang.Class.newInstance(Class.java:427) at tornadofx.FXKt.find(FX.kt:372) at tornadofx.FXKt.find$default(FX.kt:358) at tornadofx.App.start(App.kt:80) at com.my.tfx.app.UserInputUI.start(UserInputUI.kt:15) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NoSuchMethodException: com.my.tfx.app.InputView.<init>() at java.lang.Class.getConstructor0(Class.java:3082) at java.lang.Class.newInstance(Class.java:412) ... 13 more 

No estoy seguro de qué está causando esto … Tengo una configuration como esta:

 class UserInputUI : App(InputView(SVGEnum.first, StringEnum.first, UserInput.validationFunctions)::class, UIStyles::class) { init { reloadStylesheetsOnFocus() } override fun start(stage: Stage) { super.start(stage) stage.minWidth = 1024.0 stage.minHeight = 768.0 stage.maxWidth = 2560.0 stage.maxHeight = 1440.0 } } class InputView(val s: SVGEnum, val q: StringEnum, val valFunArray : ArrayList<(String)-> Boolean>) : View() { override val root = stackpane { //contents ommitted cause they're super long and I dont think its relevant, //but I can add it in if requested } } 

¿Algunas ideas? ¿O es esto un error? ¡Gracias!

Las vistas deben tener un constructor sin arguments, de modo que el marco las pueda instanciar. En la subclass de tu aplicación ( UserInputUI ), en realidad InputView instancia de InputView youthere y luego llamas a ::class para get la KClass. Se supone que solo debes pasarle la KClass directamente, por lo que debes modificar tu código para que UserInputUI se defina así:

 class UserInputUI : App(InputView::class, UIStyles::class) 

(He omitido el bloque init y la anulación de inicio. Por cierto, asegúrese de no llamar a reloadStylesheetsOnFocus en producción. Para asegurarse de que nunca reloadStylesheetsOnFocus a producirse, elimínelo y configure la opción en TornadoFX IDEA Run Configuration istead )

Luego, debes asegurarte de que InputView tenga un constructor noargs. Necesita usar otra técnica para pasarle parameters. Puesto que los codificó en su class de aplicación, puede codificarlos directamente también en InputView , o puede introducir un ViewModel que configure en App.start en function de los parameters de la command-line o un file de configuration si lo desea.

Una reescritura que simplemente codifica los valores en InputView en lugar de UserInputIU se vería así:

 class InputView() : View() { val s: SVGEnum = SVGEnum.first val q: StringEnum = StringEnum.first val valFunArray: ArrayList<(String) -> Boolean> = UserInput.validationFunctions override val root = stackpane { } } 

Espero que aclare el problema 🙂

  • No se puede usar fontawesomefx con kotlin y tornadofx
  • Tornadofx Javafx - Cómo volver a cargar una vista / componente
  • No se puede hacer que el nodo se centre en un StackPane con TornadoFX
  • Cómo cambiar la vista en TornadoFx
  • Context de reinicio de JavaFX
  • Cómo ejecutar tornado fx hello world con java 7
  • TornadoFX JavaFX Sync Desplazarse por las vistas de tabla
  • TornadoFX: el text de la label no se actualiza
  • ¿Cómo puedo refactorizar una vista para permitir el filtrado de elementos vinculados a un observable ArrayList dentro de una aplicación tornadofx?
  • El text de la label no se actualiza aunque el hilo de la interfaz de usuario parece responder
  • Cómo configurar una aplicación Gluon con Kotlin y Tornado FX