Tela Splash

15 respostas
S

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!

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) {
        }
    }
    
}
e no mais principal esta assim:
TelaSplash telaSplash = new TelaSplash(5000);
          telaSplash.setVisible(true);
          telaSplash.ControlaTempoApresentacao();

15 Respostas

T

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.

J

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…

S

zilton,

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

TelaSplash telaSplash = new TelaSplash("splashRecovery.jpg");
        
        telaSplash.open(5000);

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!

antoniopopete

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

J

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

S

a imagem esta na pasta do projeto…

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

J

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

ckitano

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

S

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

J

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

S

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

M

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.

B

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.

pedroroxd

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

R

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.

Criado 5 de setembro de 2007
Ultima resposta 3 de jan. de 2011
Respostas 15
Participantes 9