Я сделал свой собственный пример SwingWorker, чтобы ознакомиться с тем, как он работает.Как я могу правильно использовать пример SwingWorker?
Что я хочу сделать, это следующее: Когда кнопка нажата, я хочу, чтобы индикатор выполнения отображался до завершения задачи. Я хочу просто удалить индикатор выполнения и добавить строку в диалог.
Когда кнопка нажата, индикатор выполнения появляется, но никогда не исчезает. (Никогда не удаляет индикатор через 10 секунд и никогда не ставит метку вверх)
Вот SSCCE:
package swingtesting;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
public class SwingTesting {
/**
* Creates a frame that will hold a simple button to make use of SwingWorker
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame();
JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new GuiWorker().execute();
}
});
button.setText("Test Me");
frame.getContentPane().add(button);
frame.pack();
frame.setVisible(true);
}
}
class GuiWorker extends SwingWorker<Integer, Integer> {
/*
* This should just create a frame that will hold a progress bar until the
* work is done. Once done, it should remove the progress bar from the dialog
* and add a label saying the task complete.
*/
private JFrame frame = new JFrame();
private JDialog dialog = new JDialog(frame, "Swingworker test", true);
private JProgressBar progressBar = new JProgressBar();
public GuiWorker() {
progressBar.setString("Waiting on time");
progressBar.setStringPainted(true);
progressBar.setIndeterminate(true);
dialog.getContentPane().add(progressBar);
dialog.pack();
dialog.setVisible(true);
}
@Override
protected Integer doInBackground() throws Exception {
Thread.sleep(10000);
return 0;
}
@Override
protected void done() {
JLabel label = new JLabel("Task Complete");
dialog.getContentPane().remove(progressBar);
dialog.getContentPane().add(label);
}
}
Вы посмотрите на может [этот ответ] (http://stackoverflow.com/questions/8916721/java-swing-update-label/8917565#8917565) и сравнить с вашим кодом. Учебник Swing также содержит пример (ссылка доступна в классе javadoc 'JProgressBar') – Robin