JavaFXPorts с Clojure: "Эта операция разрешена только для потока событий; currentThread = main"

У меня есть мое основное пространство имен, вставленное ниже; когда я бегу ./gradlew run, он будет работать нормально, только если я закомментирую primary-screen (.getPrimary Screen) линия, так что, кажется, по какой-то причине это нарушено?

(ns lyrion.cec
  (:gen-class)
  (:require [clojurefx.clojurefx :as fx])
  (:import (javafx.stage Stage Screen)
           (javafx.scene Scene)
           (javafx.scene.control Label)
           (javafx.geometry Rectangle2D)))

(defn init []
  nil)

(defn start [^Stage stage]
  (let [content ^Label (Label. "Hello World")
        primary-screen (.getPrimary Screen)
        ;;visual-bounds ^Rectangle2D (.getVisualBounds ^Screen primary-screen)
        ;;scene ^Scene (Scene. content (.getWidth visual-bounds) (.getHeight visual-bounds))
        scene ^Scene (Scene. content 800 600)]
    (.setScene stage scene)
    (.show stage)))

(defn stop []
  nil)

(defn -main
  ""
  [& args]
  (fx/start-app init start stop))

fx/start-app является функцией моей библиотеки clojurefx, которая создает Application подкласс и вызывает init, start и stop соответственно согласно спецификации. У меня никогда не было проблем с этим в любом приложении JavaFX для настольных компьютеров. Также странно, что, по-видимому, делать это самостоятельно необходимо в JavaFXPorts, хотя все примеры указывают на обратное.

0 ответов

Другие вопросы по тегам