Splash Screen (Ta osso!)

Boa galera???

É o seguinte…

Ja olhei tutos da sun, tutos aqui, tutos no google, mas não consigo fazer o tal splah…

quando eu uso o comando

SplashScreen splash = SplashScreen.getSplashScreen();

Ele retorna como null, e aí já era neh???

Tem alguem que pode me dar um help ae???

Desde jah, vlw galerinha do mal!!!

Você usou o parâmetro -splash:<image> quando iniciou sua aplicação?

Entao vini…

eu sou meio noob na questao de execucao do programa…

e nao manjo como mexer no arquivo sei lah o que que tem dentro do jar e tals…

tem como vc me dar um overview??

Tem q ter a JRE6 para os exemplos abaixo.

Para mostrar splash na linha de comando:
java -splash:image.ext App (obs: a imagem neste caso esta no mesmo caminho que App.class)

No jar:
manifest.mf
Manifest-Version: 1.0
Main-Class: App
SplashScreen-Image: image.ext
(tem uma linha em branco aqui - line break)

criando o jar:
jar -mcvf manifest.mf App.jar App.class image.ext

executando o jar: java -jar App.jar

A imagem desaparece quando a primeira janela é criada pela aplicação.

Quem falou em arquivos dentro do jar?

Bem, se você realmente tivesse lido as várias documentação que falou, ao invés de simplesmente ido direto nos códigos fontes, você teria visto que tudo isso só funciona se você exibir a splash screen através da linha de execução do programa.

A partir do Java 6, a Sun criou um recurso na VM para que exiba uma imagem de splashScreen antes mesmo que sua primeira classe Java suba. Na verdade, a imagem é exibida antes que a VM suba completamente. Para isso você precisa fornecer na linha de comando o argumento -splash:seuSplash.png, ou fornecer um parâmetro extra no classpath (a sintaxe exata está no post do tivrfoa, acima).

A mesma documentação diz que, após sua aplicação subir, será possível requisitar uma instância desse splash screen, desde que ele tenha sido exibido, usando o método getSplash(), e que esse mesmo método retornará null, caso o splash não tenha aparecido (por exemplo, seu usuário pode ter deletado a imagem de splashScreen).

Finalmente, a documentação também diz que o Splash desaparecerá automaticamente, assim que a primeira janela do Swing for exibida.

Uma dica: Leia atentamente a documentação. Não corra direto nos códigos fontes. Ela realmente diz coisas importantes.

Vini…

o tal arquivo que eu queria falar era o tal Manifest…

eu tentei gerar o esquema por linha de comando, mas aí vem a pegada…

Se eu tenho uma aplicacao, a classe que tem os códigos da splah tem que ser a Main ou ser sub-classe da Main???

Pq assim, meu intúito era conseguir fazer a splahs rodar pra ver se dava pra dar uma industrializada nela criando um jar que ja tem o código pronto e eu só mandasse uns parametros pra um método e talz… manjou???

Eu fiz assim…

Tinha uma classe Main que chamava a classe Splash.

não sei se deu pra entender…

Olá amigo

bem estou usando assim, espero que lhe ajude:

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException, InterruptedException {
        Splash.criarExibirInterface();
        createAndShowGUI();
}

codigo no splash.


import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import assistenciadesktop.FramePrincipal_Old;
import javax.swing.UnsupportedLookAndFeelException;

public class Splash {

	private static TelaAberturaJWindow sp;
    private static String contar;

	public static void criarExibirInterface() throws InterruptedException, ClassNotFoundException {

        Thread.sleep(3000);
		String lookAndFeel = UIManager.getSystemLookAndFeelClassName();

		sp = new TelaAberturaJWindow("splash_guj.jpg");
		sp.showSplash();
                sp.setProgressMaxMin(0, 100);

                sp.setDisplayString(50, "Conectando ao banco de dados...");

                for (int contar = 0 ; contar < 20000; contar ++){
                   System.out.println("Valor"+contar);
                }
		sp.setDisplayString(100, "Carregando interface...");
        sp.hideSplash();
	}

    @SuppressWarnings("empty-statement")
	public static void main(String[] args) {

		String lookAndFeel = UIManager.getSystemLookAndFeelClassName();

		sp = new TelaAberturaJWindow("splash_guj.jpg");
		sp.showSplash();
                sp.setProgressMaxMin(0, 100);

                sp.setDisplayString(50, "Conectando ao banco de dados...");

                for (int contar = 0 ; contar < 20000; contar ++){
                   System.out.println("Valor"+contar);
                }
		sp.setDisplayString(100, "Carregando interface...");


		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
                try {
                    try {
                        criarExibirInterface();
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(Splash.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } catch (InterruptedException ex) {
                    Logger.getLogger(Splash.class.getName()).log(Level.SEVERE, null, ex);
                }
			}
		});
	}

}

Silvio Guedes

 Então amigo, vi seu código e é bem parecido com o meu que eu to fazendo aqui. Só que o meu ta dando NullPointerException toda hora porque ele nao ta achando as img o problema e esse. 
 Minhas img ficam na mesma pasta do arquivo .jar q eu criei. Quando eu rodo pelo console ou Eclipse ele me retorna somente as exceções.  :evil: 
 Tem alguma sugestão do que pode ser? testei rodar as img com o comando java -splash:img.jpg classes.Principal e deu certo, só nao vai na hora de rodar o programa. Valeu !!!