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:
/** 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.
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…
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…
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…
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
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.
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.