引用ScalaFx类时在运行时出现此错误的原因是什么(请参见标题),而不是如果我切换到JavaFx类引用(替代方法),则按预期方式工作?使用Scala 2.12和ScalaFx 8.0.192-R14时,无需使用基于JavaFx的解决方法就可以运行。关于环境:Scala 2.13.1,ScalaFx 12.0.2-R18,IntelliJ 2019.3.2,Java 8,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库依赖项,但到目前为止我还不走运)?
ScalaFX 12.0.2将与JavaFX 12一起使用。如果将它与Java 8一起使用,当路径中包含JavaFX 8时,您会遇到奇怪的问题。使用ScalaFX 8 for Java8。这在项目网站上有明确说明:https : //github.com/scalafx/scalafx#scalafx-8
JavaFX 12中添加了字段“ BACK”。请参阅此处的API文档:https : //openjfx.io/javadoc/12/javafx.graphics/javafx/scene/input/MouseButton.html#BACK JavaFX 8中不存在该字段。因此,这就是“ java.lang.NoSuchFieldError:返回”的原因-ScalaFX试图访问不存在的字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句