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 正在尝试访问不存在的字段。
在引用 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 正在尝试访问不存在的字段。