Ich habe versucht, OpenGL durch Penumbra zu verwenden, um zu versuchen, direkt auf einem JPanel mit seinem Grafikkontext zu zeichnen.Race condition (?) Bei Verwendung von Swing
Das wäre toll, außer dass ich in Schwierigkeiten gerate ... Ich kompiliere meinen Code, und ~ 1 Mal von 25, die Grafik (es ist ein Rechteck für das Beispiel) zeichnet gut. Der andere ~ 24 mal, tut es nicht.
Hier ist mein Code:
(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)))
Die Funktion draw-line
ist unten:
(defn draw-line [panel color x y w h]
(let [graphics (.getGraphics panel)]
(doto graphics
(.setColor color)
(.drawRect x y w h))))
Ich habe keine Ahnung, was los ist. Zuerst dachte ich, es wären die Refs, an denen ich gearbeitet habe, aber dann habe ich diese rausgenommen und habe immer noch diese Probleme. Ich habe auch lein und slime/swank und emacs zurückgesetzt. Ich bin ziemlich verwirrt.
Wie üblich, jede Hilfe wäre willkommen. Ich hoffe, das ist eine Frage mit einer Antwort! In letzter Zeit, ich scheine das Unmögliche zu fragen :)
Fantastisch, danke! Irgendwelche Vorschläge, wo man anfangen soll? (Und, für Bonuspunkte, irgendeine Idee, wo ich vom EDT abweichen könnte?) – Isaac
Ich fürchte, ich weiß nicht genug über das Framework, das Sie verwenden - ich erkenne die Syntax nicht, außer in der Lage zu sein sag, dass es deklarativ ist. Eine (nervige) Sache, die Sie tun könnten, ist die Unterklasse aller von Ihnen verwendeten Steuerelemente, überschreiben Sie die Methoden, die Sie verwenden könnten, und lassen Sie sie den aktuellen Thread ausgeben. Eine andere Möglichkeit ist, an der Spitze der Zeichnungslinie den Namen des Threads auszudrucken und zu sehen, ob er die Buchstaben AWT enthält. Danach weiß ich einfach nicht genug über deinen Code. –