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 🙂

  • TornadoFX con TestFX cierra la vista después de cada TestCase
  • TornadoFX reemplaza el layoutChildren en la región
  • Tornadofx - controlando el object de la fila de la vista de tabla mientras construye
  • En TornadoFX, ¿cómo puedo vincular las properties de BigDecimal a otra propiedad de BigDecimal usando objectBinding?
  • ¿Cómo agregar leyenda secundaria al gráfico JavaFX?
  • Forma de configurar las properties de PrimaryStage o Scene en TornadoFX
  • CellCache se representa inesperadamente en TableView con tornadoFX
  • TornadoFX: Type-Safe CSS con otras bibliotecas
  • ¿Por qué mi escena es nula?
  • Enlazando una vista a una propiedad de controller cambiante
  • Context de reinicio de JavaFX