Fala pessoal, estou com um problema com a utilização do SwingWorker no codigo abaixo:
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
public class Numerar implements Runnable {
JFrame jf = new JFrame("Numerando...");
JPanel jp = new JPanel();
JProgressBar carregador = new JProgressBar();
public void run() {
final SwingWorker worker = new SwingWorker() {
protected Object doInBackground() throws Exception {
for(int i=0; i <= 100000; i++){
System.out.println("Numero: "+i);
}
return null;
}
protected void done() {
super.done();
JOptionPane.showMessageDialog(null,
"O processo foi concluido com sucesso!", "Aviso",
JOptionPane.INFORMATION_MESSAGE);
jf.dispose();
}
};
worker.execute();
carregador.setValue(worker.getProgress());
carregador.setIndeterminate(true);
carregador.setStringPainted(true);
carregador.setPreferredSize(new Dimension(200, 20));
jp.setBorder(BorderFactory.createTitledBorder("Carregando..."));
jp.add(carregador);
jf.getContentPane().add(jp);
jf.pack();
jf.setResizable(false);
jf.setVisible(true);
}
public static void main(String[] args) {
new Numerar().run();
}
}
Queria saber como fazer o JProgressBar mostrar o andamento do processo, e como seria para fazer o SwingWorker parar quando ocorrer uma determinada ação.
Dei uma mexida na sua classe, para funcionar… Mas não deixe de ler o tutorial. Ele também explica sobre o InvokeLater, threads de inicialização e Event Dispatcher Thread. Abs!
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
import java.util.List;
public class Numerar implements Runnable {
JFrame jf = new JFrame("Numerando...");
JPanel jp = new JPanel();
JProgressBar carregador = new JProgressBar(0, 100000);
public void run() {
final SwingWorker worker = new SwingWorker<Void, Integer>() {
protected Void doInBackground() throws Exception {
for(int i=0; i <= 100000; i++){
System.out.println("Numero: "+i);
publish(i);
}
return null;
}
protected void process(List<Integer> progress){
carregador.setValue(progress.get(progress.size()-1));
}
protected void done() {
super.done();
JOptionPane.showMessageDialog(null,
"O processo foi concluido com sucesso!", "Aviso",
JOptionPane.INFORMATION_MESSAGE);
jf.dispose();
}
};
worker.execute();
carregador.setValue(worker.getProgress());
carregador.setStringPainted(true);
carregador.setPreferredSize(new Dimension(200, 20));
jp.setBorder(BorderFactory.createTitledBorder("Carregando..."));
jp.add(carregador);
jf.getContentPane().add(jp);
jf.pack();
jf.setResizable(false);
jf.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Numerar());
}
}