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!
packageView;importjavax.swing.ImageIcon;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JWindow;/** * * @author Administrador */publicclassTelaSplashextendsJWindow{privateJPanelpainel1;privateJLabelimagemLogoTipo;privateImageIconimagem;privatelongtempoApresentacao;/** Creates a new instance of TelaSplash */publicTelaSplash(longtempo){tempoApresentacao=tempo;getContentPane().setLayout(null);setBounds(208,174,600,381);painel1=newJPanel();painel1.setLayout(null);painel1.setBounds(0,0,600,381);//String url = TelaSplash.class.getResource("splashRecovery.jpg").toString();imagem=newImageIcon("splashRecovery.jpg");imagemLogoTipo=newJLabel(imagem);imagemLogoTipo.setBounds(0,0,599,380);painel1.add(imagemLogoTipo);getContentPane().add(painel1);}// Método que controla o tempo de espera para a aberturapublicvoidControlaTempoApresentacao(){try{ThreadContador=newThread();Contador.start();Contador.sleep(tempoApresentacao);Contador.stop();// oculta a janela de apresentação e destrói o objeto da memóriathis.hide();this.dispose();}catch(ExceptionErro){}}}
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.
J
Junioruesc
cara tenho essa splash aki… funciona blz…
importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.Toolkit;importjava.awt.event.WindowEvent;importjava.awt.event.WindowListener;importjavax.swing.BorderFactory;importjavax.swing.ImageIcon;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JWindow;/** * Esta classe gerencia uma tela de splash. * * @author Zilton Cordeiro Junior * @version (a version number or a date) */publicclassSplashWindowextendsJWindowimplementsWindowListener{privateJLabelimagem=null;privateImageIconfigura=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(Stringsplash){figura=newImageIcon(getClass().getResource(splash));imagem=newJLabel(figura);imagem.setBorder(BorderFactory.createLineBorder(Color.black,1));}publicImageIcongetFigura(){returnfigura;}/** * 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 */publicvoidopen(inttempo){this.getContentPane().add(imagem);this.pack();Dimensiondimension=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 */privatevoidsleep(inttempo){try{Thread.sleep(tempo);}catch(InterruptedExceptionie){ie.printStackTrace();JOptionPane.showMessageDialog(null," Erro 00 - Falha no sleep do Splash "," Erro ",JOptionPane.ERROR_MESSAGE);}catch(Exceptione){e.printStackTrace();JOptionPane.showMessageDialog(null," Erro 00 - Falha no sleep do Splash "," Erro ",JOptionPane.ERROR_MESSAGE);}}/** * Fecha a janela de splash * @return void */publicvoidclose(){dispose();}/** * @param windowevent * @return void */publicvoidwindowOpened(WindowEventwindowevent){Graphics2Dgraphics2d=(Graphics2D)getGlassPane().getGraphics();graphics2d.setColor(newColor(51,102,153));graphics2d.setFont(newFont("SansSerif",0,16));}/** * @param windowevent * @return void */publicvoidwindowActivated(WindowEventwindowevent){}/** * @param windowevent * @return coid */publicvoidwindowClosed(WindowEventwindowevent){}/** * @param windowevent * @return void */publicvoidwindowClosing(WindowEventwindowevent){}/** * @param windowevent * @return void */publicvoidwindowDeactivated(WindowEventwindowevent){}/** * @param windowevent * @return void */publicvoidwindowDeiconified(WindowEventwindowevent){}/** * @param windowevent * @return void */publicvoidwindowIconified(WindowEventwindowevent){}}
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
SergioJunior
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
Junioruesc
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
SergioJunior
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
Junioruesc
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…
o
esta retornando Null…
falow
J
Junioruesc
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
SergioJunior
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
mfjeng
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
BitBytes
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.
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.