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 🙂

  • Las properties vinculadas no funcionan
  • Crea una vista arbitraria
  • En TornadoFX, ¿cómo puedo hacer que una propiedad cambie cuando cambian otras properties?
  • Cómo implementar TornadoFX WebEngine Callback en Kotlin
  • TornadoFX: permite copyr un elemento de una vista de list al portapapeles
  • TornadoFx: que realiza mejor FXML o type-CSS
  • Columnas de tabla dinámica
  • java.lang.ClassNotFoundException: no encontró la class "com.my.app.example.Main" en la ruta: DexPathList
  • Cómo crear una pantalla de inicio en tornadofx
  • TornadoFX: el text de la label no se actualiza
  • ¿Por qué mi escena es nula?