ScalaFx MouseEvent: java .lang.NoSuchFieldError: BACK - PullRequest
1 голос
/ 25 января 2020

В чем может быть причина для получения этой ошибки во время выполнения (см. Заголовок) при обращении к классу 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, Windows 10. Ниже я приведу основные фрагменты, которые, как мы надеемся, смогут выделить проблему.

Со ссылкой на класс 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, но пока мне не повезло)?

1 Ответ

2 голосов
/ 25 января 2020

ScalaFX 12.0.2 должен использоваться с JavaFX 12. Если вы используете его с Java 8, вы столкнетесь со странными проблемами, когда у вас JavaFX 8 находится в пути. Используйте ScalaFX 8 для 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 пытается получить доступ к полю, которого нет.

...