Splash Screen com Barra de progresso

Olá, estou tentando encontrar uma resposta para solucionar o meu problema! Através do GUJ consegui montar uma Splash Screen (Tela de boa-vinda). Agora eu estou querendo adicionar nessa tela uma barra de progresso que vá contabilizando uma porcentagem até a abertura da tela de login do meu sistema. Será que alguém pode me ajudar?
Desde já agradeço!

Podem contar comigo para outras dúvidas! :smiley:

Aqui vai um exemplo utilizando a nova classe do JSE 6, SplashScreen.

   private class CarregaTask extends Task
    {
        SplashScreen splash = null; 
        
        public CarregaTask(Application app, View view)
        {
            super(app);
            this.view = view;
        }
        
        @Override
        protected Object doInBackground()
        {   
            splash = SplashScreen.getSplashScreen();
            try
            {
                setSplashScreenProcess(20, splash, "Inicializando...");
                // carrega algo
                setSplashScreenProcess(50, splash, "Inicializando...");               

                // carrega algo
                                
                setSplashScreenProcess(90, splash, "Inicializando...");  
                // carrega algo
                 setSplashScreenProcess(100, splash, "Inicializando...");

                //pronto para a tela de login
            }
            catch(UnsatisfiedLinkError e)
            {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "Não foi possível encontrar " +
                        "a dll mp2032 da impressora bematech. ");
                System.exit(0);
               
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "Arquivo de configuração dos " +
                        "relatórios não encontrado. " + e.getMessage());                                
            }
            catch(Exception e)
            {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "Problemas com a conexão " +
                        "com o banco de dados. Erro ao iniciar a fabrica de DAOs. " + e.getMessage());
                System.exit(0);
            }  
            return null;
        }

        @Override
        protected void succeeded(Object arg0) {
            splash.close();
            navigator.getLoginPresenter().openView();           
        }
        
        
        @Override protected void finished() 
        {
            setMessage("Terminado.");                       
        }
    }

protected void setSplashScreenProcess(double p, SplashScreen splashScreen, String str)
{
        if (splashScreen != null)
        {

            Dimension size = splashScreen.getSize();
            Graphics g = splashScreen.createGraphics();


            FontMetrics fm = g.getFontMetrics ();
            
            int sWidth = fm.stringWidth (str);
            int sHeight = fm.getHeight ();
            int x = (size.width-sWidth)/2;
            int y = (int) ((size.height * 0.90));
            g.setColor(Color.ORANGE);
            g.fillRect(x - (sWidth/2), y - sHeight,((int)(sWidth*2*(p/100))), sHeight+2);
            if (sWidth < size.width && 2*sHeight < size.height)
            {
                g.setColor (Color.blue);
                g.drawString (str, (size.width-sWidth)/2, y);
            }
            splashScreen.update();
        }         
 }

utilize o padrão observer para isto.

Fala Vinícius! Eu hoje tentei implementar esse exemplo, mas não estou conseguindo. Esta classe pertence qual pacote? Eu observei que neste exemplo não tem nenhum import e dá erro de sintaxe pois existem vários atributos que, ou não foram declarados ou pertence a uma classe que não foi criada ou é porque não foi o import da classe usada! Eu tentei importar alguns pacotes, mas não resolveu o problema! Se puder ver depois é só escrever! Esse exemplo irá gerar o que eu havia dito acima?

Abraços!

Vamos ver se consigo explicar:

  • No exemplo, estou utilizando o Swing Application Framework e sua classe Task, que é uma subclasse do SwingWorker…ou seja, estou abrindo uma thread separada para realizar a animação do splash screen enquanto a thread principal carrega os dados do aplicativo (em factory do jpa, arquivos de relatórios, entre outros…)
  • Esqueça os parâmetros Application e View… não interessam neste caso…
  • O método setSplashScreen atualiza a barra de progresso do splash screen, desenhando um retângulo colorido e com um texto (a string passada como parâmetro).

Caso ainda não consiga utilizar, esse link pode ser de alguma utilidade:
http://java.sun.com/developer/JDCTechTips/2005/tt1115.html

Neste final de semana vou tentar implementar este exemplo, agradeço a você Vinícius pela ajuda até aqui!

Agradeço desde já ! :smiley:

Se alguém tiver outra idéia, também pode escrever aqui para que possamos escolher o melhor caminho!

Um abraço!

Cara, estou tentando fazer o splash mas nunca consegui, vc poderia me passar o que vc fez, preciso de ajuda;

Alguem já consegiu usar o SplashScreen do java 6 ( Java Web Start ) ? Eu não consegui, local roda mais utilizando o jnlp ! nada…

achei isso : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6510416