我正在尝试创建一个scala程序,它使用javafxscenebuilder为gui生成的fxml文件。尽管https://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm 是java,我用它作为我的示例起点(找不到更好的了。)
如果我使用controller类的java版本,我就能够运行这个示例,如示例所示(可用于java版本或scala版本的类,该类扩展应用程序并在其中包含重写的start方法。)但如果我将此java版本控制器类替换为scala版本,则会出现以下错误:
线程“javafx application thread”java.lang.runtimeexception中的异常:javafx.fxml.fxmloader$methodhandler.invoke(fxmloader)处的java.lang.reflect.invocationtargetexception。java:1774)
以下是intellij在使用菜单项“代码/将java转换为scala”时将java版本控制器(我称之为jcontroller)转换为scala版本(我称之为SCOontroller)的内容:
import javafx.event.ActionEvent
import javafx.fxml.FXML
import javafx.scene.text._
class sController {
@FXML private val actiontarget: Text = null
@FXML protected def handleSubmitButtonAction(event: ActionEvent): Unit = {
actiontarget.setText("Sign in button pressed")
}
}
当然,我还将生成的fxml文件中的<gridpane-fx:controller=“jcontroller”更改为<gridpane-fx:controller=“scocontroller”。
我也尝试过修改scala版本的控制器,从上面intellij生成的代码开始,但没有任何效果。
如果我替换
@FXML private val actiontarget: Text = null
具有
@FXML private val actiontarget: Text = new Text()
然后它毫无例外地运行,但对按下的按钮没有响应。
我还尝试了javascript版本,如示例所示,代替了控制器版本,但我对javascript一无所知,intellij似乎没有这里提到的“javascript和typescript捆绑插件”:https://www.jetbrains.com/help/idea/2020.3/javascript-specific-guidelines.html#ws_javascript_before_you_start 我尝试了不同的javascript和typescript插件,但都没用。
有什么想法,或者这篇文章是正确的吗?https://bugs.openjdk.java.net/browse/jdk-8116127
暂无答案!
目前还没有任何答案,快来回答吧!