Я перешел от использования OpenGL через Penumbra к попытке рисовать непосредственно на JPanel, используя его графический контекст.Состояние гонки (?) При использовании Swing
Это было бы здорово, если бы у меня не возникало проблем ... Я скомпилирую свой код и ~ 1 раз из 25, графический (это прямоугольник для примера) рисует просто отлично. Другой ~ 24 раза, это не так.
Вот мой код:
(def main
(let [frame (JFrame. "This is a test.")
main-panel (JPanel. (GridBagLayout.))
tpan (proxy [JPanel] [] (getPreferredSize [] (Dimension. 600 400)))]
(doto frame
(set-content-pane
(doto main-panel
(grid-bag-layout
:gridx 0 :gridy 0
tpan
:gridx 0 :gridy 1
xy-label)))
(pack-frame)
(set-visible))
(draw-line tpan Color/RED 250 250 50 50)))
Функция draw-line
ниже:
(defn draw-line [panel color x y w h]
(let [graphics (.getGraphics panel)]
(doto graphics
(.setColor color)
(.drawRect x y w h))))
Я понятия не имею, что происходит. Сначала я подумал, что это были ссылки, над которыми я работал, но потом я их вытащил и все еще имею эти проблемы. Я сбросил lein и slime/swank и emacs. Я очень озадачен.
Как обычно, любая помощь будет оценена по достоинству. Надеюсь, это вопрос с ответом! В последнее время я, кажется, задаю невозможное :)
Фантастический, спасибо! Любые предложения о том, с чего начать? (И, для бонусов, любая идея, где я мог бы отклониться от EDT?) – Isaac
Боюсь, я недостаточно знаю об используемой структуре - я не понимаю синтаксис, кроме как иметь возможность скажите, что он декларативный. Одна (раздражающая) вещь, которую вы могли бы сделать, - это подкласс всех используемых вами элементов управления, переопределить методы, которые вы можете использовать, и заставить их выводить текущий поток. Другая возможность заключается во вводе строки, чтобы распечатать это имя потока и посмотреть, содержит ли он буквы AWT. Однако после этого я просто не знаю достаточно о вашем коде. –