Wie kann man eine kontinuierlich laufende Aktivitätsanzeige erzeugen, die in einem eigenen Fenster erscheint?

Die Swing-Bibliothek stellt mit ihren beiden Klassen JProgressBar und ProgressMonitor Möglichkeiten bereit, den Fortschritt einer Operation anzuzeigen. ProgressMonitor erlaubt es jedoch nicht, Fortschritte anzuzeigen, deren Abbruch-Zeitpunkt unbekannt ist. JProgressBar stellt hierzu die Methode setIndeterminate(boolean indeterminate) bereit, ist jedoch von JComponent abgeleitet.

In der Beispielklasse wird im Konstruktor die selbst definierte Methode createProgressBarWindow() aufgerufen. In ihr werden zunächst je ein Objekt eines JWindow und einer JProgressBar erzeugt. Nach der Dimensionierung der JProgressBar wird deren Status durch die Methode setIndeterminate(true) auf unbestimmt (indeterminate) gesetzt. Dies bedeutet, das diese Anzeige prinzipiell bis in alle Ewigkeit laufen kann und keinen wirklichen Fortschritt anzeigt.
Die Progressbar wird dem Fenster hinzugefügt, die Größe des Fensters gesetzt und schließlich, bevor es sichtbar gemacht wird, zentriert und auf eine hohe Z-Ebene gesetzt, damit es immer als oberstes Fenster erscheint.

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JWindow;


public class InditerminateProgressBar extends JFrame {

    public InditerminateProgressBar() {
        createProgressBarWindow();
    }

    private void createProgressBarWindow() {
        JWindow win = new JWindow();
        JProgressBar pb = new JProgressBar();
        pb.setPreferredSize(new Dimension(200, pb.getPreferredSize().height - 4));
        pb.setIndeterminate(true);
        win.add(pb, BorderLayout.CENTER);
        win.setSize(pb.getPreferredSize());
        win.setAlwaysOnTop(true);
        win.setLocationRelativeTo(this);
        win.setVisible(true);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setTitle("Progress Bar");
        frame.setVisible(true);
        new InditerminateProgressBar();
    }
}

In der main()-Methode wird vor der Instanzierung der Progressbar-Klasse ein leerer JFrame erzeugt. Er ist hier prinzipiell überflüssig und dient nur dazu, das Programm über den fenstereigenen Schließen-Button bequem zu beenden. Allerdings...
die Beispielklasse ist ja von JFrame abgeleitet, wozu dann hier nochmals einer? Die Lösung liegt darin, dass auf diese Weise die Progressbar individueller dimensioniert werden kann. Kommentiert man in main() die Erzeugung und Methodenaufrufe des JFrame aus, so wird ein eine blanke Progressbar erzeugt, die keine fenstereigenen Möglichkeiten zum Schließen besitzt.
Startet man das Programm aus einer Konsole heraus, lässt es sich in diesem Falle mit Ctrl + C beenden.