JavaFXPorts с Clojure: «Эта операция разрешена только для потока событий; currentThread = main» - PullRequest
0 голосов
/ 13 октября 2018

мое основное пространство имен вставлено ниже;когда я запускаю ./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, хотя все примеры указывают на обратное.

...