Сделайте заставку с индикатором прогресса, как Eclipse

Мой основной класс загружает конфигурацию из файла, затем показывает фрейм. Я хочу сделать заставку с индикатором выполнения, например Eclipse, чтобы прогресс увеличивался во время загрузки файла, а всплеск исчезал после загрузки файла. Тогда мой основной кадр загружается.

MainClass code:

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
  }
}

У меня нет большого опыта работы с Swing, поэтому, пожалуйста, посоветуйте, как этого добиться.

UPDATE: я нашел следующий пример, но у него мало проблем:

when the counter gets to the specified number it should stop at (300) it keeps counting for ever without stopping the timer and hiding the splash screen.

i want to bind the counter to the file loading, so while the file is loaded the progress gets loaded until the file gets loaded then the progress completes and the splash screen disappears.

@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

        }

    }

}

Ответы на вопрос(2)

Ваш ответ на вопрос