2009-03-26 6 views
1

Es gibt viele Methoden, die Sie nicht aufrufen sollten, wenn Sie nicht im AWT-Ereignisthread sind. Dies sind im Allgemeinen Methoden, die die Benutzeroberfläche in irgendeiner Weise manipulieren.Ist der Thread Component.getGraphicsConfiguration sicher?

Ist dies der Fall mit GetGraphicsConfiguration (...) von Component? Es ist nur ein Getter, aber es scheint einen Deadlock zu verursachen, wenn der Ereignis-Thread auf dem Thread wartet, der diese Methode aufruft.

Während der Sackgasse zu lösen ist ziemlich trivial (vermeiden Sie Warte mit oder auf dem Event Thread synchronisieren), sollte ich nur getGraphicsConfiguration in einem Runnable weitergegeben SwingUtilities.invokeLater (...) oder invokeAndWait anrufen (...)?

Antwort

1

AWT Thread-Sicherheit ist (unbedingt) gebrochen. Geh einfach nicht in die Nähe. Bleiben Sie auf der geraden AWT EDT

Beachten Sie auch, dass, nur weil eine Methode in java.awt.Component ist, bedeutet es nicht, dass das Objekt (oder ein Objekt, das von ihm referenziert) nicht in Swing und daher wirklich nicht vorgibt, thread- überhaupt sicher. (Genug nicht?)

+0

er ... also du sagst ja nur die Methode, wenn ich auf dem Event-Thread bin? –

+0

Ich sage, dass es sehr ratsam wäre, dies zu tun. –