Ich entschuldige mich für die vielen Fragen zu JProgressBar Update, aber das hat mich wirklich verrückt gemacht.JProgress Bar wird in SwingWorker nicht aktualisiert
Ich habe eine JProgressBar über einen SwingWorker aktualisiert, aber ich habe immer noch das typische Problem der Bar aktualisiert nach Abschluss. Hier
ist der entsprechende Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.swing.*;
public class SwingTest {
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
init();
}
});
}
public static void init() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JProgressBar bar = new JProgressBar();
JButton button = new JButton("Start");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
bar.setMaximum(100);
bar.setValue(0);
SwingWorker worker = new SwingWorker<String, Void>()
{
@Override
public String doInBackground()
{
int val = 0;
// +1 to make inclusive
for (int i = 0; i < 100; i++)
{
try
{
Thread.sleep(50);
} catch (InterruptedException e)
{
e.printStackTrace();
}
setProgress(++val);
}
return "Hello SwingWorker World";
}
@Override
public void done()
{
}
};
worker.addPropertyChangeListener(
new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent evt)
{
if ("progress".equals(evt.getPropertyName()))
{
bar.setValue((Integer)evt.getNewValue());
}
}
}
);
worker.execute();
try
{
System.out.println("Return: " + worker.get().toString());
} catch (InterruptedException e1)
{
e1.printStackTrace();
System.out.println("Failed.");
} catch (ExecutionException e1)
{
e1.printStackTrace();
System.out.println("Failed.");
}
}
});
panel.add(button);
panel.add(bar);
frame.add(panel);
frame.pack();
frame.setSize(200,90);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Wenn das Problem durch einen anderen Abschnitt wahrscheinlich ist, werde ich meine Frage mit mehr Code bearbeiten, wenn nötig.
Vielen Dank im Voraus.
BEARBEITEN: Code auf ein Minimalprodukt reduziert.
Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) posten. –