Hacer pantalla de bienvenida con barra de progreso como Eclipse.

Mi clase principal carga la configuración de un archivo y luego muestra un marco. Quiero hacer una pantalla de bienvenida con una barra de progreso como Eclipse para que el progreso aumente mientras el archivo se está cargando y la salpicadura desaparece después de que se carga el archivo. Entonces mi marco principal se carga.

Código de la clase principal:

public static void main(String[] args) {
  ApplicationContext context = new ClassPathXmlApplicationContext(
    "classpath:/META-INF/spring/applicationContext.xml");
  // splash with progress load till this file is loaded
  UserDao userDao = context.getBean(UserDao.class);
  isRegistered = userDao.isRegistered();
  System.out.println("registered: " + isRegistered);
  if (isRegistered) {
    // progress finish and hide splash
    log.debug("user is registered"); // show frame1
  } else {
    // progress finish and hide splash
    log.debug("user is not registered"); // show frame2
  }
}

No tengo mucha experiencia con Swing, así que por favor aconseje cómo lograrlo.

ACTUALIZAR: He encontrado el siguiente ejemplo, pero tiene poco problema:

cuando el contador llega al número especificado, debe detenerse en (300), sigue contando para siempre sin detener el temporizador y ocultando la pantalla de bienvenida.

Quiero vincular el contador a la carga del archivo, así que mientras se carga el archivo, el progreso se carga hasta que el archivo se carga, el progreso se completa y la pantalla de inicio desaparece.

@SuppressWarnings("serial")
@Component
public class SplashScreen extends JWindow {

    static boolean isRegistered;

    static Log log = LogFactory.getLog(SplashScreen.class);

    private static JProgressBar progressBar = new JProgressBar();
    private static SplashScreen execute;
    private static int count;
    private static Timer timer1;

    public SplashScreen() {

        Container container = getContentPane();
        container.setLayout(null);

        JPanel panel = new JPanel();
        panel.setBorder(new javax.swing.border.EtchedBorder());
        panel.setBackground(new Color(255, 255, 255));
        panel.setBounds(10, 10, 348, 150);
        panel.setLayout(null);
        container.add(panel);

        JLabel label = new JLabel("Hello World!");
        label.setFont(new Font("Verdana", Font.BOLD, 14));
        label.setBounds(85, 25, 280, 30);
        panel.add(label);

        progressBar.setMaximum(50);
        progressBar.setBounds(55, 180, 250, 15);
        container.add(progressBar);
        loadProgressBar();
        setSize(370, 215);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public void loadProgressBar() {
        ActionListener al = new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                count++;
                progressBar.setValue(count);
                if (count == 300) {
                    timer1.stop();
                    execute.setVisible(false);
                    return;
                }
            }
        };
        timer1 = new Timer(50, al);
        timer1.start();
    }

    public static void main(String[] args) {

        execute = new SplashScreen();

        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:/META-INF/spring/applicationContext.xml");

        UserDao userDao = context.getBean(UserDao.class);

        isRegistered = userDao.isRegistered();


        if (isRegistered) {
             // show frame 1
        } else {
                                                    // show frame 2

        }

    }

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta