Boa tarde pessoal!!!
Li o artigo do Rafael Steil (http://www.guj.com.br/java.tutorial.artigo.25.1.guj) para criar uma splash screen, mas fiquei com uma dúvida…
para rodar a splash screen preciso criar uma thread?
tipo, implementei no meu sistema e com o looping do exemplo e funciona, mas quando coloco para abrir minha aplicação real, a imagem do splash screen não chega a aparecer na tela (fica apenas o formato da splash em branco e depois aparece a aplicação).
Meu método main está mais ou menos assim:
[code]public static void main(String[] args) {
Global.verificarVersaoDaVM();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Splash.getInstance().openSplash();
ResourceFile rscfile = new ResourceFile("nl.weev.adminexpress.resources.RSC");
Global.setResource(rscfile);
InterfaceBuilder.setResourceFile(rscfile);
Fachada fachada = new Fachada();
Global.setFacade( fachada );
Global.setMainFrame( new FramePrincipal( fachada ) );
CAppearence aparencia = new CAppearence(Global.getMainFrame());
aparencia.setLookAndFeel(new Plastic3DLookAndFeel());
Global.getMainFrame().setVisible(true);
Splash.getInstance().finish();
} catch (FileNotFoundException fnfex) {
InterfaceBuilder.showException(null, fnfex);
fnfex.printStackTrace();
}
}
});
}[/code]
Será que alguém podia me ajudar…???
brigadão!
Para o splash screen aparecer basta coloca-lo para rodar em uma Thread.
A forma mais básica de resolver isso basta criar uma classe que implemente a interface Runnable (ou coloque em em uma classe anônima, particularmente eu não gosto) dentro do método run() coloque a lógica para carregar o splash screen.
Depois, basta instanciar uma Thread passando como argumento de seu construtor a classe que implementa o seu Runnable, depois chame o método start() da sua Thread.
[]s
Bom dia!!
Na verdade ainda não entendi :S
Já estou chamando a splash dentro de uma thread
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Devo criar outra thread e chamá-la dentro da SwingUtilities.invokeLater?
Obrigada
Ok,
Eu resolvi colocando Splash.getInstance().openSplash(); fora de SwingUtilities.invokeLater, coloquei direto no método main e Splash.getInstance().finish(); coloquei no bloco finally. Funcionar, funcionou, mas conceitualmente está correto?
Obrigada.
[code]public static void main(String[] args) {
Global.verificarVersaoDaVM();
Splash.getInstance().openSplash();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
ResourceFile rscfile = new ResourceFile("nl.weev.adminexpress.resources.RSC");
Global.setResource(rscfile);
InterfaceBuilder.setResourceFile(rscfile);
Fachada fachada = new Fachada();
Global.setFacade( fachada );
Global.setMainFrame( new FramePrincipal( fachada ) );
CAppearence aparencia = new CAppearence(Global.getMainFrame());
aparencia.setLookAndFeel(new Plastic3DLookAndFeel());
Global.getMainFrame().setVisible(true);
} catch (FileNotFoundException fnfex) {
InterfaceBuilder.showException(null, fnfex);
fnfex.printStackTrace();
} finally {
Splash.getInstance().finish();
}
}
});
}[/code]