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