Tela Splash

Pessoal,

Estou trabalhando em uma telinha Splash, mas ela nao aparece… a aplicação demora o tempo esceficado pelo contrutor da TelaSplash para inicializar, mas a Tela nao aparece… abaixo segue o código:

Se alguém puder me ajudar eu agradeço!

[code]package View;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;

/**
*

  • @author Administrador
    */
    public class TelaSplash extends JWindow {

    private JPanel painel1;
    private JLabel imagemLogoTipo;
    private ImageIcon imagem;
    private long tempoApresentacao;

    /** Creates a new instance of TelaSplash */
    public TelaSplash(long tempo) {
    tempoApresentacao = tempo;
    getContentPane().setLayout(null);
    setBounds(208,174,600,381);

     painel1 = new JPanel();
     painel1.setLayout(null);
     painel1.setBounds(0,0,600,381);
     
     //String url = TelaSplash.class.getResource("splashRecovery.jpg").toString();
     imagem = new ImageIcon("splashRecovery.jpg");
     imagemLogoTipo = new JLabel(imagem);
     imagemLogoTipo.setBounds(0,0,599,380);
     
     painel1.add(imagemLogoTipo);
     getContentPane().add(painel1);
    

    }

// Método que controla o tempo de espera para a abertura

public void ControlaTempoApresentacao() {
    try {
        Thread Contador = new Thread();
        Contador.start();
        Contador.sleep(tempoApresentacao);
        Contador.stop();

// oculta a janela de apresentação e destrói o objeto da memória
this.hide();
this.dispose();
} catch(Exception Erro) {
}
}

}[/code]

e no mais principal esta assim:

TelaSplash telaSplash = new TelaSplash(5000); telaSplash.setVisible(true); telaSplash.ControlaTempoApresentacao();

Se você puder usar o Java 6.0, existe uma opção que não exige programação nenhuma para mostrar a tela de splash. Basta passar o parâmetro -splash na linha de comando do Java, se não me engano.

cara tenho essa splash aki… funciona blz…

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JWindow;

/**
 * Esta classe gerencia uma tela de splash.
 * 
 * @author Zilton Cordeiro Junior
 * @version (a version number or a date)
 */

public class SplashWindow extends JWindow implements WindowListener
{
    private JLabel imagem = null;
    private ImageIcon figura = null;

    /**
     * Construtor, rebece uma String com o endereco da imagem que sera exibida na tela de splash.
     * @param splash    String com o endereco da imagem exibida na tela de splash.
     */
    SplashWindow( String splash )
    {
        figura = new ImageIcon( getClass().getResource(splash) );
        imagem = new JLabel( figura );
        imagem.setBorder( BorderFactory.createLineBorder( Color.black, 1 ) );
    }
    
    public ImageIcon getFigura() {
        return figura;
    }
    
    /**
     * Exibe a tela de splash.
     * Recebe um int que informa o tempo de exibicao, em milisegundos, da tela de splash.
     * @param tempo     int que indica o tempo, em milisegundos, que sera exibida a tela de splash. 
     * @return void
     */
    public void open( int tempo )
    {
        this.getContentPane().add( imagem );
        this.pack();
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        this.setLocation( ( dimension.width - getSize().width )/2, ( dimension.height - getSize().height )/2 );
        this.addWindowListener( this );
        this.setVisible( true );
        
        sleep( tempo );     
    }
   
    /**
     * Aguarda um tempo em milisegundos 
     * @param tempo     int que representa o tempo, em milisegundos, que ser�aguardado.
     * @exception InterruptedException
     * @exception Exception
     * @return void
     */
    private void sleep( int tempo )
    {
        try {
            Thread.sleep( tempo );
        }
        catch( InterruptedException ie ) {
            ie.printStackTrace();
            JOptionPane.showMessageDialog( null, " Erro 00 - Falha no sleep do Splash ", " Erro ", JOptionPane.ERROR_MESSAGE );
        }
        catch( Exception e ) {
            e.printStackTrace();
            JOptionPane.showMessageDialog( null, " Erro 00 - Falha no sleep do Splash ", " Erro ", JOptionPane.ERROR_MESSAGE );
        }
    }

    /**
     * Fecha a janela de splash
     * @return void
     */
    public void close()
    {
        dispose();
    }

    /**
     * @param windowevent
     * @return void
     */
    public void windowOpened( WindowEvent windowevent )
    {
        Graphics2D graphics2d = (Graphics2D)getGlassPane().getGraphics();
        graphics2d.setColor( new Color( 51, 102, 153 ) );
        graphics2d.setFont( new Font( "SansSerif", 0, 16 ) );
    }
    /**
     * @param windowevent
     * @return void
     */
    public void windowActivated( WindowEvent windowevent )
    {
    }
    /**
     * @param windowevent
     * @return coid
     */
    public void windowClosed( WindowEvent windowevent )
    {
    }
    /**
     * @param windowevent
     * @return void
     */
    public void windowClosing( WindowEvent windowevent )
    {
    }
    /**
     * @param windowevent
     * @return void
     */
    public void windowDeactivated( WindowEvent windowevent )
    {
    }
    /**
     * @param windowevent
     * @return void
     */
    public void windowDeiconified( WindowEvent windowevent )
    {
    }
    /**
     * @param windowevent
     * @return void
     */
    public void windowIconified( WindowEvent windowevent )
    {
    }
}

para rodar é so dar um new passando o endereço da imagem e depois chamar o método open passando o tempo em milisegundos que vc deseja…

flws…

zilton,

To usando seu código mas esta retornando um erro, acho que estou errando na hora de passar o caminho do arquivo.

[code]TelaSplash telaSplash = new TelaSplash(“splashRecovery.jpg”);

    telaSplash.open(5000);[/code]

O erro que esta retornando é:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

na linha:

public ImageIcon (URL location) { this(location, location.toExternalForm()); }

Falow!

Eu acho que você tem que passar o path completo: c:\trabalho\arquivo.jpg

Sergio,

vc tem que passar o caminho completo da imagem, caso ela esteja na mesma pasta do codigo não é necessário o caminho…

SplashWindow splash = new SplashWindow( "figuras/figura_splash.jpg" );
        splash.open(5000);
        splash.close();

fique atento para as barras “” e “/”.
flws

a imagem esta na pasta do projeto…

mas de qualquer forma coloquei o path completo, das duas maneiras como citado acima… nada de funcionar…

Veja se vc não está utilizando alguma referencia null ou algo assim… veja se o nome da classe ta td certo pq vc disse q o erro retornado é java.lang.NullPointerException esse codigo funciona, estou utlizando ele aqui… A classe q mandei é a SplashWindow veja se qdo vc colocou ela ai não continuou utilizando referencia pra sua antiga classe…

flws

Talvez esse material possa ser útil
http://www.guj.com.br/user.article.get.chain?page=1&article.id=25
abraço

Cara…

inacreditável… conferi tudo, até criei a classe de novo, com o nome que vc utilizou… chamei de outra aplicação… o erro é sempre o mesmo… inacreditável…

o

esta retornando Null…

falow

cara acho q ja sei seu problema…
não é no codigo não
é na figura que vc ta utilizando, a extensão dela. Tenta colocar .jpg em minusculo se tiver em maiúsculo vai dar null com certeza, salva essa mesma imagem pelo paint ai… como .jpg tenho quase 100% de certeza que vai funcionar ja tive esse problema uma vez…
java é chato com essas coisas
salva essa figura como figura.jpg

flws

cara… vou chorar hehehe

nao funciona… salvei de novo (via paint), troquei de imagem… peguei uma ponto gif… acho q devo estar pagando vale… mas nao sei onde.

valeu

Olá, coloque a figura em um diretório dentro do classpath, depois limpe e construa novamente o projeto (menu de contexto -> qdo clicar no seu projeto).
Abraços.

Pessoal fiz assim, modifiquei a seguinte linha

 figura = new ImageIcon(getClass().getResource(splash));

para

 figura = new ImageIcon(splash);

Pode passar o caminho inteiro ou o relativo, png ou jpg que funciona [size=14]perfeitamente[/size]. Só não sei o porque? Mas vou dá uma olhada.

Sempre procure sua dúvida nos artigos…
Tipo aqui.

Sei que já faz tempo que o tópico foi aberto mas utilizei a classe acima e funcionou corretamente, não sei qual IDE vocês usaram, mas no NetBeans funcionou somente quando coloquei a imagem dentro da pasta NetbeamsProjects/nome do projeto/src e pasta está referenciada nas propriedades do projeto.
Na hora de passar o parâmetro da imagem ficou como: “/nome do arquivo.jpg”

Não sei se com vocês aconteceu o mesmo mas quando uso um JOptionPane no programa ele sempre exibe o Splash novamente.