如果我切换到JavaFx类引用(解决方法),那么在引用ScalaFx类时在运行时出现此错误(请参阅标题)的原因是什么?在Scala2.12和ScalaFx 8.0.192-R14中,事情可以在没有基于JavaFx的解决方法的情况下工作。关于环境:Scala2.13.1,ScalaFx 12.0.2-R18,IntelliJ 2019.3.2,Java8,Windows10。下面我将提供核心代码片段,希望能够突出这个问题。
对于ScalaFx MouseEvent类引用,似乎会使用me.button生成异常:
import scalafx.Includes._
import scalafx.scene.input.{MouseButton, MouseEvent}
...
def flowPaneEvents(flowpane: FlowPane): Unit = {
flowpane.onMouseClicked = (me: MouseEvent) => {
// this statement causes the exception with scalafx
me.button match {
case MouseButton.Primary => println("primary button")
case MouseButton.Secondary => println("secondary button")
case _ =>
}
me.consume()
}
}而对于javaFx类,一切都运行得很好。如下所示:
import scalafx.Includes._
import javafx.scene.{input => jfxsi}
...
def flowPaneEvents(flowpane: FlowPane): Unit = {
flowpane.onMouseClicked = (me: MouseEvent) => {
// this javafx based reference gets things done
me.getButton match {
case jfxsi.MouseButton.PRIMARY => println("primary button")
case jfxsi.MouseButton.SECONDARY => println("secondary button")
case _ =>
}
me.consume()
}
}我错过了什么(我试图重新导入sbt库依赖项,但到目前为止还不够幸运)?
发布于 2020-01-25 10:29:58
ScalaFX 12.0.2将与JavaFX 12一起使用。如果您将其与Java8一起使用,那么当您的JavaFX 8在path中时,您将遇到奇怪的问题。使用Java8的Java8。这在项目网站上有明确的说明:https://github.com/scalafx/scalafx#scalafx-8
字段"BACK“是在JavaFX 12中添加的,参见接口文档:https://openjfx.io/javadoc/12/javafx.graphics/javafx/scene/input/MouseButton.html#BACK在JavaFX 8中不存在,所以这就是"java.lang.NoSuchFieldError: BACK”的原因-- ScalaFX试图访问不存在的字段。
https://stackoverflow.com/questions/59904382
复制相似问题