Aprendí cómo el swing no es seguro para hilos. Profundizando más, descubrí que cada modificación de un componente de oscilación debe hacerse en el subproceso de envío de evento para evitar varios problemas asociados con el multihilo. Sin embargo, la información parecía detenerse por completo allí. No parece haber un buen tutorial que explique cómo hacer esto en cualquier lugar accesible en Internet.¿Cómo se usa el subproceso de distribución de eventos?
parches acumular información de código publicado en relación con otras cuestiones, parecía que iba a tener que poner un bloque desordenado de código en cada modificación de oscilación sola en mi programa (como en este ejemplo de mi propio código):
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
setTitle("Frame title");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(800, 480);
setLocationRelativeTo(null);
setIconImage(Toolkit.getDefaultToolkit().createImage(ClassLoader.getSystemResource("Frame icon.png")));
}
});
} catch (Exception e) {
e.printStackTrace();
}
Básicamente, ¿es esto correcto? ¿Tengo que poner ese código (o el equivalente con invokeLater) en cada modificación de un componente Swing en mi código?
Además, ¿por qué Swing no hace esto automáticamente?
no es tan bueno como lo desees, pero puedes instalar el código de detección de violación Swing/EDT automático y cometen bastantes errores (no tienes ningún enlace a mano pero hay bastantes). – TacticalCoder
Microsoft en la era de Windows 3.0/3.1 tenía "binarios de depuración" que harían este tipo de comprobación para que no tenga que reiniciar cada vez que envíe argumentos incorrectos. Siempre me molestaba que Java no tuviera lo mismo, especialmente porque es lo suficientemente inteligente como para poder compilarlo en un conmutador de línea de comandos. –
Solía ponerlo siempre "en" la aplicación Java, reemplazando los gestores de repintado con * CheckThreadViolationRepaintManager *. Recuerdo que funcionó bastante bien:) – TacticalCoder