È thread Component.getGraphicsConfiguration sicuro?
-
22-08-2019 - |
Domanda
Ci sono molti metodi non si dovrebbe chiamare se non si è sul filo evento AWT. Questi sono generalmente metodi che manipolano l'interfaccia utente in qualche modo.
E 'questo il caso del componente getGraphicsConfiguration (...)? E 'solo un getter ma sembra causare un deadlock se il thread evento è in attesa sul filo di chiamare questo metodo.
Mentre risolvere la situazione di stallo è abbastanza banale (evitare l'uso di attesa o sincronizzare sul filo dell'evento), devo solo essere chiamata getGraphicsConfiguration in un Runnable passato a SwingUtilities.invokeLater (...) o invokeAndWait (...)?
Soluzione
AWT thread-sicurezza è (necessariamente) rotto. Basta non andare da nessuna parte vicino ad esso. Rimanere sul rettilineo AWT EDT
Si noti inoltre che solo perché un metodo è in java.awt.Component
, ciò non significa che l'oggetto (o un oggetto a cui fa riferimento esso) non è in Swing e quindi in realtà nemmeno finta di essere thread-safe a tutti. (Chi non ha abbastanza?)