Mit SwingWorker einen Fortschrittsbalken in eine GUI einfügen
Ich verwende SwingWorker, um eine Fortschrittsanzeige mit Java-Swing-APIs zu erstellen.
Ich habe eine Klasse, die SwingWorker erweitert
class Swinger extends SwingWorker {
private ClassAnalyzer classAnalyzer;
public Swinger(ClassAnalyzer classAnalyzer){
this.classAnalyzer = classAnalyzer;
}
@Override
public Void doInBackground() throws InterruptedException {
try
{
int progress = 0;
while (progress < 100) {
// at this point I make certain elaboration on classAnalyzer
progress++;
//Call the process method to update the GUI
publish(progress);
}
}
catch(InterruptedException e)
{
}
return null;
}
@Override
protected void process(List chunks) {
for (Integer chunk : chunks) {
progressBar.setValue(chunk);
//if the switchtype checkbox is selected then
//change the progressbar to a determined type
//once the progress has reached 50
if (chunk > 49)
{
if (switchType.isEnabled() && switchType.isSelected())
{
progressBar.setStringPainted(true);
}
}
}
}
}
und eine zweite Klasse (ich schreibe ein Stück davon)
public Tester()
{
JFrame guiFrame = new JFrame();
//make sure the program exits when the frame closes
guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
guiFrame.setTitle("Creating a Table Example");
guiFrame.setSize(700,200);
//This will center the JFrame in the middle of the screen
guiFrame.setLocationRelativeTo(null);
goButton = new JButton("Go");
goButton.setActionCommand("Go");
goButton.addActionListener(new ActionListener()
{
//When the button is clicked the SwingWorker class is executed and
//the button is disabled
@Override
public void actionPerformed(ActionEvent event)
{
progressBar.setStringPainted(progressType.isSelected());
ClassAnalyzer c = new ClassAnalyzer();
Swinger task = new Swinger(c);
task.execute();
int methods = c.getNumberOfMethods();
if(methods == 0){
JOptionPane.showMessageDialogo(null, "methods not found");
}
goButton.setEnabled(false);
}
});
}
Wenn ich in einem Tester die zweite Klasse starte, wird die Meldung "Methoden nicht gefunden" angezeigt, bevor der Fortschrittsbalken angezeigt wird, während für den Fall, dass danach eine Meldung angezeigt wird. Was ist zu tun?