É um exemplo de JProgressBar que aceita uma String de mensagem, ou um valor int para carregar em %. também é possível mudar a cor de Fundo do ProgressBar, ou a cor da barra que carrega, e mudar a fonte da escrita. Tem uma imagem, mas é só substituir.


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import org.jfree.ui.FontChooserPanel;
import lib.Formato;
public class Espera extends JDialog implements Runnable { 
    private static final long serialVersionUID = 3977298828280279606L;
 private static final int MINIMUM = 0;    private JPanel painel     = null;
    private int qtTotal, qtdeProcessado;    
    private JTextField txtQtdeProcessada;
    private javax.swing.Timer activityMonitor;  
    JProgressBar pbar = null;
            /**
     * Construtor
     */
        public void run() {
        }
       public Espera() { 
    this.pbar = new JProgressBar();
    } 
   public Espera(String texto){
    this();
    this.pbar.setIndeterminate(true);
    this.pbar.setStringPainted(true);
    this.pbar.setString(texto);
    init(); 
    setVisible(true);
   }
     public Espera(int qtdTotal){
    this();
    this.qtTotal = qtdTotal;
    this.pbar.setIndeterminate(false);
    this.pbar.setStringPainted(true);
    this.pbar.setMaximum(this.qtTotal);
      init(); 
    setVisible(true);
   }
     public void setFont(String nomeFonte){
    this.pbar.setFont(new java.awt.Font(nomeFonte, 0, 12));
   }
     public void setCorFundo(Color corFundo){
    this.pbar.setBackground(corFundo);
     }
     public void setCorBarra(Color corBarra){
    this.pbar.setForeground(corBarra);
   }
             public int getQtTotal() {
  return qtTotal; } public void setQtTotal(int qtTotal) {
  this.qtTotal = qtTotal;
 }
 public int getQtdeProcessado() {
  return qtdeProcessado;
 }
 public void setQtdeProcessado(int qtdeProcessado) {
  //this.qtdeProcessado = qtdeProcessado;
  pbar.setValue(qtdeProcessado);
 }
 public void setTexto(String texto) {
  pbar.setString(texto);
 }
 private void init(){
    initialize(); 
                //Posiciona a janela
        Toolkit thekit = this.getToolkit();
        Dimension dim = thekit.getScreenSize();
        int hor = (dim.width/2) - 150;
        int ver = (dim.height/2) - 100;
        this.setUndecorated(true);
        this.setBounds(hor, ver, 301, 151);
        this.setVisible(true);
        this.requestFocus();
   }
        /**
     * Construção do painel
     * @return void
     */
    private void initialize() { 
        painel = new PanelBackground("/img/espera.png");
        painel.setLayout(null);
        painel.setBorder(Formato.GRID_BORDER);
        painel.setBounds(1, 1, 300, 150);
                              pbar.setBounds(155,115,120,20);
        pbar.setVisible(true);
  painel.add(pbar);
        this.setContentPane(painel); 
            }
}

Um exemplo de como ele é aplicado com um int bem básico só para testes mesmo.


import java.awt.Color;
import javax.swing.SwingUtilities;
import lib.Espera;
public class TesteEspera {
 
public static void main(String[] args) {
  Espera r = new Espera(100000000);
  r.setCorFundo(Color.DARK_GRAY);
  r.setCorBarra(Color.blue);
  r.setFont("Verdana");
  Thread tr = new Thread(r);
  tr.start();
  int a =100000000;
  for(int i=0; i   r.setQtdeProcessado(i);
  }
 }
}

E agora um exemplo de uma String


import java.awt.Color;
import javax.swing.SwingUtilities;
import lib.Espera;
public class TesteEspera {
 public static void main(String[] args) {
  Espera r = new Espera("Aguarde...");
  r.setCorFundo(Color.DARK_GRAY);
  r.setCorBarra(Color.YELLOW);
  r.setFont("Verdana");
  Thread tr = new Thread(r);
  tr.start();
 }
}