Je suis passé d'essayer d'utiliser OpenGL à Penumbra pour essayer de dessiner directement sur un JPanel en utilisant son contexte graphique.Condition de course (?) Lors de l'utilisation de Swing
Ce serait génial, sauf que je rencontre des problèmes ... Je compile mon code, et ~ 1 fois sur 25, le graphique (c'est un rectangle pour l'exemple) dessine très bien. L'autre ~ 24 fois, ce n'est pas le cas.
Voici mon 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)))
La fonction est draw-line
ci-dessous:
(defn draw-line [panel color x y w h]
(let [graphics (.getGraphics panel)]
(doto graphics
(.setColor color)
(.drawRect x y w h))))
Je ne sais pas ce qui se passe. Au début, je pensais que c'était sur les refs sur lesquels je travaillais, mais ensuite je les ai enlevés, et j'ai toujours ces problèmes. J'ai réinitialisé lein et slime/swank et emacs, aussi. Je suis assez perplexe.
Comme d'habitude, n'importe quelle aide serait appréciée. J'espère que c'est une question avec une réponse! Dernièrement, je semble demander l'impossible :)
Fantastique, merci! Des suggestions sur où commencer? (Et, pour les points bonus, toute idée où je pourrais m'écarter de l'EDT?) – Isaac
Je crains de ne pas en savoir assez sur le framework que vous utilisez - je ne reconnais pas la syntaxe sauf pour pouvoir dites que c'est déclaratif. Une chose (ennuyante) que vous pourriez faire est de sous-classer tous les contrôles que vous utilisez, de remplacer les méthodes que vous pourriez utiliser et de les faire sortir le thread en cours. Une autre possibilité est à la tête de draw-line d'imprimer ce nom de thread et de voir s'il contient les lettres AWT. Après cela, je n'en sais pas assez sur votre code. –