3 Stimmen

So verwenden Sie JProgressBar

Ich möchte die JProgressBar und muss innerhalb einer Sekunde geladen werden. Ich möchte nicht warten, bis eine Aufgabe abgeschlossen ist. Ich möchte nur den Fortschrittsbalken in einer Sekunde füllen. Also habe ich folgenden Code geschrieben. Aber es funktioniert nicht. Der Fortschrittsbalken füllt sich nicht. Ich bin neu in Java. Bitte kann mir jemand helfen.

    public void viewBar() {
        progressbar.setStringPainted(true);
        progressbar.setValue(0);
        for(int i = 0; i <= 100; i++) {
            progressbar.setValue(i);
            try {
                Thread.sleep(10);
            } catch (InterruptedException ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
        }
        progressbar.setValue(progressbar.getMinimum());
    }

6voto

Hovercraft Full Of Eels Punkte 280443

Sie können Thread.sleep(...) nicht auf dem Haupt-Swing-Thread, dem EDT oder "Event Dispatch Thread", aufrufen, da dies nichts anderes tut, als Ihre gesamte Anwendung, Fortschrittsanzeige und alles, in den Schlaf zu versetzen. Wahrscheinlich passiert 1 Sekunde lang nichts, und dann ist der gesamte Fortschrittsbalken gefüllt.

Ich schlage vor, dass Sie anstelle von Thread.sleep einen Swing Timer für diesen Teil verwenden, oder, wenn Sie einen lang laufenden Prozess überwachen wollen, einen Hintergrund-Thread wie einen SwingWorker verwenden. SwingWorker werden im JProgressBar-Tutorial behandelt.

z.B. mit einem Timer:

public void viewBar() {

  progressbar.setStringPainted(true);
  progressbar.setValue(0);

  int timerDelay = 10;
  new javax.swing.Timer(timerDelay , new ActionListener() {
     private int index = 0;
     private int maxIndex = 100;
     public void actionPerformed(ActionEvent e) {
        if (index < maxIndex) {
           progressbar.setValue(index);
           index++;
        } else {
           progressbar.setValue(maxIndex);
           ((javax.swing.Timer)e.getSource()).stop(); // stop the timer
        }
     }
  }).start();

  progressbar.setValue(progressbar.getMinimum());
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X