Ho fatto qualche tentativo con la classe SwingWorker spiegata in quell'articolo..ma purtroppo senza successo. Il problema è che non posso avviare il thread prima del click sul pulsante...
Io voglio semplicemente realizzare questo:
-Clicco sul pulsante
-Visualizzo una finestrella di notifica che dice di attendere
-Parte l'algoritmo pesante
-Finito l'algoritmo pesante, scompare la notifica e appare il risultato
Ho fatto cosi ma pare non funzionare, ovvero la finestra di notifica mi appare sempre trasparente:
Classe che esegue l'algoritmo (di nome FrontController):
codice:
public static BufferedImage correggiImmagine(BufferedImage image)
{
immagineDaCorreggere=image;
SwingWorker worker=new SwingWorker()
{
public Object construct()
{
GestoreImmagine gestore=new GestoreImmagine(immagineDaCorreggere);
return gestore.correctSkew();
}
};
worker.start();
return (BufferedImage)worker.get();
}
Evento della JFrame:
codice:
private void btnApriActionPerformed(ActionEvent evt) {
//Ottiene l'immagine dal filesystem
BufferedImage nuovaImmagine=FrontController.apriImmagine();
if(nuovaImmagine!=null)
{
//Setta l'attributo di classe
imgOriginale=nuovaImmagine;
//Imposta l'immagine nell'area dell'immagine originale e la disegna
canvasImgOriginale.setImage(imgOriginale);
F_Correzione notifica=new F_Correzione(this);
notifica.setLocationRelativeTo(this);
notifica.setVisible(true);
//Ottiene l'immagine corretta
imgCorretta=FrontController.correggiImmagine(imgOriginale);
//Imposta l'immagine nell'area dell'immagine corretta e la disegna
canvasImgCorretta.setImage(imgCorretta);
notifica.setVisible(false);
//Attiva il pulsante per il salvataggio dell'immagine corretta
btnSalva.setEnabled(true);
}
}
Secondo me il problema è che comunque avvio il thread alla pressione del pulsante (è posso farlo solo dopo la pressione del pulsante)...e di fatto non ho risolto nulla.
Qualche suggerimento? Grazie e Buona Pasqua a tutti