Java:SwingWorker e invokeLater
java Aprile 4th, 2007Chi ha sviluppato interfacce grafiche in java, si sarà scontrato con il problema di realizzare GUI che non rispondessero in maniera rapida agli eventi o che diventavano lente nelle operazioni di disegno. A questo problema la Sun ha cercato un rimedio introducendo delle utility: javax.swing.SwingUtilities.invokeLater o javax.swing.SwingUtilities.invokeAndWait.
Per comprendere il loro funzionamento, dobbiamo introdurre il concetto di event dispatch thread. Questo altro non è che il thread dove vengono eseguiti gli eventi delle interfacce swing. I metodi sopra elencati non fanno altro che inviare a questo thread dei compiti da compiere con la differenza che il primo invia il compito e ritorna immediatamente al thread che o ha invocato mentre il secondo invia e aspetta che il compito venga eseguito.
Per questo motivo è consigliato sempre avviare un Gui con la seguente chiamata:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}}
Nel caso in cui all’interno della Gui dobbiamo eseguire lunghe operazioni, conviene utlizzare l’utility SwingWorker che evita il problema dell’occupazione delle EDT per lugnhi periodi. Questa classe “astratta” mette a disposizione molti metodi di comunicazione con i thread e con EDT.
Riferimenti:
http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-swingworker.html?page=1
http://www.javalobby.org/eps/galbraith-swing-2/index.html
Aprile 12th, 2007 at 10:18 am
salve, vicino di blog!