package SwingWorkerTest; import java.awt.EventQueue; /** * Extinderea acestui class, poate descrie problem,care se executa * in regim asihron si face refresh la Swing. * @author Dan * */ abstract class SwingWorkerTask implements Runnable { /** * In acesta metoda de realizeaza rezolvarea problemei. * Trebue de luat in consideratie ca pentru a face refresh la interface * dupa executarea unui segment de lucru se folosesste * metoda doUpdate ci NU update */ public abstract void work() throws InterruptedException; /** * Overload la aceasta metoda, se paote de realizat operatii cu interface,care se fac * pina a incepe lucrul */ public void init() {} /** * OverLoad la acesta metoda, se poate de realizat operatii cu interface userului,care se * petrec dupa un segment de lucru */ public void update() {} /** * Overload la acesta metoda, * se poate de realizat operatii cu interfata dupa finisarea lucrului */ public void finish() {} private void doInit() { EventQueue.invokeLater(new Runnable() { public void run() { init(); } }); } /** * Aceasta metoda se cheama din metoda work() si face refrashe la interface dupe * un segment de lucru */ protected final void doUpdate() { if(done) return; EventQueue.invokeLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub update(); } }); } private void doFinish() { EventQueue.invokeLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub finish(); } }); } public final void run() { doInit(); try { done = false; work(); } catch(InterruptedException ex) {} finally { done = true; doFinish(); } } private boolean done; }