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 (...)?

È stato utile?

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?)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top