ScalaFx MouseEvent: java.lang.NoSuchFieldError: BACK

ScalaFx MouseEvent: java.lang.NoSuchFieldError: BACK

在引用 ScalaFx class 时,在 run-time 中出现此错误的原因可能是什么 class,而不是如果我切换到 JavaFx class参考(解决方法)事情是否按预期工作?使用 Scala 2.12 和 ScalaFx 8.0.192-R14,事情在没有基于 JavaFx 的解决方法的情况下工作。关于环境:Scala 2.13.1、ScalaFx 12.0.2-R18、IntelliJ 2019.3.2、Java 8、Windows 10。下面我提供了希望能够突出问题的核心片段。

使用 ScalaFx MouseEvent class 引用似乎会生成异常 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 classes 一切正常。见下文:

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()
  }
}

我错过了什么(我已经尝试 re-import sbt library-dependencies,但到目前为止我并不幸运)?

ScalaFX 12.0.2 将与 JavaFX 12 一起使用。如果您将它与 Java8 一起使用,当您 [=18] 时,您将 运行 遇到奇怪的问题=]FX 8 在路径中。使用 ScalaFX 8 for Java 8。项目网站上明确说明了这一点:https://github.com/scalafx/scalafx#scalafx-8

字段 "BACK" 已添加到 JavaFX 12 中。请参阅此处的 API 文档: https://openjfx.io/javadoc/12/javafx.graphics/javafx/scene/input/MouseButton.html#BACK 它不存在于 JavaFX 8 中,因此这就是 "java.lang.NoSuchFieldError: BACK" 的原因 - ScalaFX 正在尝试访问不存在的字段。