Originariamente inviato da valia
posta il codice, ho usato molto swingworker e non ho capito che intendi
Ok, il problema è che quella parte di codice è sbagliata/ancora da scrivere, perchè ho provato con un po' di esempi ma non ci sono riuscito.
Questa parte è l'inizio della classe del frame (ci sono solo alcune delle variabili d'istanza) con la classe Task inserita all'interno:
codice:
public class toSync extends javax.swing.JFrame implements PropertyChangeListener {
private JFileChooser fc;
private File source, dest;
private boolean enableBackup, enableReciprocal, enableOldBackup; //boolean for radiobutton
private Task task;
private boolean working;
class Task extends SwingWorker<Void, Void> {
/*
* Main task. Executed in background thread.
*/
@Override
public Void doInBackground() {
//Random random = new Random();
int progress = 0;
working = true;
//Initialize progress property.
setProgress(100);
while (working) {
/*System.out.println(progress);
//Sleep for up to one second.
try {
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException ignore) {}
//Make random progress.
progress += random.nextInt(10);
setProgress(Math.min(progress, 100));*/
}
return null;
}
/*
* Executed in event dispatching thread
*/
@Override
public void done() {
System.out.println("entrato in done()");
progressBar.setVisible(false);
Toolkit.getDefaultToolkit().beep();
syncButton.setEnabled(true);
setCursor(null); //turn off the wait cursor
}
}
questo invece è il codice del metodo propertyChange:
codice:
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("entrato in propertyChange(), non if");
if (working) {
System.out.println("entrato in propertyChange(), anche nell'if");
progressBar.setVisible(true);
}
}
questo invece il metodo listener del pulsante di sincronizzazione, che quando schiacciato dovrebbe comparire la barra e quando invece viene disallocato dovrebbe scomparire:
codice:
private void syncButtonActionPerformed(java.awt.event.ActionEvent evt) {
syncButton.setEnabled(false);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//Instances of javax.swing.SwingWorker are not reusuable, so
//I create new instances as needed.
task = new Task();
task.addPropertyChangeListener(this);
task.execute();
try {
//progressBar.setStringPainted(true);
//progressBar.setIndeterminate(true);
if(enableReciprocal)
Code.reciprocal(source, dest, log);
else if(enableOldBackup)
Code.oldBackup(source, dest, log);
else if(enableBackup)
Code.backup(source, dest, log);
//progressBar.setStringPainted(false);
//progressBar.setIndeterminate(false);
working = false;
FrameLog.setVisible(true);
} catch(IOException error) {
System.out.println("I/O Error");
}
}