dúvida de splash screen e thread

3 respostas
A

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:

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();
			}					
    		}
        });
}
Será que alguém podia me ajudar...????

brigadão!

3 Respostas

douglasfs

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

A

Bom dia!!

Na verdade ainda não entendi :S

 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

A

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.

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();
                		}					
    		}
        });
}
Criado 3 de junho de 2005
Ultima resposta 6 de jun. de 2005
Respostas 3
Participantes 2