quinta-feira, 26 de setembro de 2013

Netbeans- Adicionando Tela de Splash Screen

 
Quando se desenvolve aplicativos que possuem muitos componentes gráficos, após o double-click no arquivo jar correspondente ao aplicativo que se deseja abrir, o computador começa com a execução do programa porém temos a impressão que não está sendo inicializado porque durante a abertura nada é mostrado ao usuário.

Para informar ao usuário do aplicativo,  que o mesmo está sendo carregado, podemos utilizar uma tela inicial chamada Splash Screen, que é mostrada imediatamente ao pedido de execução do programa e quando o primeiro Frame do programa é carregado a imagem Splash Screen desaparece.
A partir da versão 1.6 podemos executar o Splash Screen de uma maneira bem simples na JVM apenas alterando o arquivo Manifest que está inserido no arquivo jar.

Para demonstrar como executar esta tela crie um projeto no Netbeans que execute algum JFrame na classe principal.


Adicione a imagem que  queira apresentar na abertura do aplicativo pode ser inclusive um gif animado no pacote do projeto.
No exemplo abaixo criei uma classe chamada Visual que extend um JFrame, como temos poucos componentes gráficos,  adicionei um método de atraso antes de inicializar o JFrame para temporizar por uns 10 segundos, desta forma dá tempo de ver a atuação da tela do Splash Screen.




O metodo delay() é um loop para aguardar 10 segundos antes de inicializar o JFrame, caso a aplicação já apresente bastante demora na inicialização não precisaremos do metodo delay(), segue abaixo o exemplo:




Uma vez adicionado a imagem que se deseje apresentar na tela do Splash Screen podemos editar o arquivo manifest.mf para isto vá até a aba arquivos e edite o arquivo manifest.mf como mostra a figura seguinte:


No exemplo acima foi adicionado a linha SplashScreen-Image: apotec/logoSplash.gif  logo abaixo a linha existente, observe o espaço depois dos dois pontos.
Agora basta ir na aba projetos e com o lado direito do mouse clicar em limpar e construir e poderemos ver a tela de Splash funcionar abrindo o arquivo *.jar que se encontra na pasta dist do projeto.
Veja a figura seguinte:


























Quando geramos o arquivo *.jar com bibliotecas externas e alteramos o arquivo build.xml como foi explicado no blog Netbeans-Gerando arquivo jar unico para distribuição devemos alterar as tags do manifest conforme exemplo abaixo, visto que o o arquivo manifest.mf será gerado pelo arquivo buil.xml.
Veja as alterações no build.xml abaixo:


<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="supervisao" default="default" basedir=".">
    <description>Builds, tests, and runs the project supervisao.</description>
    <import file="nbproject/build-impl.xml"/>
    <!--


    There exist several targets which are by default empty and which can be 
    used for execution of your tasks. These targets are usually executed 
    before and after some main targets. They are: 


      -pre-init:                 called before initialization of project properties
      -post-init:                called after initialization of project properties
      -pre-compile:              called before javac compilation
      -post-compile:             called after javac compilation
      -pre-compile-single:       called before javac compilation of single file
      -post-compile-single:      called after javac compilation of single file
      -pre-compile-test:         called before javac compilation of JUnit tests
      -post-compile-test:        called after javac compilation of JUnit tests
      -pre-compile-test-single:  called before javac compilation of single JUnit test
      -post-compile-test-single: called after javac compilation of single JUunit test
      -pre-jar:                  called before JAR building
      -post-jar:                 called after JAR building
      -post-clean:               called after cleaning build products


    (Targets beginning with '-' are not intended to be called on their own.)


    Example of inserting an obfuscator after compilation could look like this:


        <target name="-post-compile">
            <obfuscate>
                <fileset dir="${build.classes.dir}"/>
            </obfuscate>
        </target>


    For list of available properties check the imported 
    nbproject/build-impl.xml file. 




    Another way to customize the build is by overriding existing main targets.
    The targets of interest are: 


      -init-macrodef-javac:     defines macro for javac compilation
      -init-macrodef-junit:     defines macro for junit execution
      -init-macrodef-debug:     defines macro for class debugging
      -init-macrodef-java:      defines macro for class execution
      -do-jar-with-manifest:    JAR building (if you are using a manifest)
      -do-jar-without-manifest: JAR building (if you are not using a manifest)
      run:                      execution of project 
      -javadoc-build:           Javadoc generation
      test-report:              JUnit report generation


    An example of overriding the target for project execution could look like this:


        <target name="run" depends="supervisao-impl.jar">
            <exec dir="bin" executable="launcher.exe">
                <arg file="${dist.jar}"/>
            </exec>
        </target>


    Notice that the overridden target depends on the jar target and not only on 
    the compile target as the regular run target does. Again, for a list of available 
    properties which you can use, check the target you are overriding in the
    nbproject/build-impl.xml file. 


    -->
<!--  Arquivo unico Inicializado com Splash Screen adicionar as linhas abaixo -->


<!--   Observar tags do manifest -->


    <target name="package-for-store" depends="jar">


        <!-- Change the value of this property to be the name of your JAR,
             minus the .jar extension. It should not have spaces.
             <property name="store.jar.name" value="MyJarName"/>
        -->
        <property name="store.jar.name" value="Nome do Arquivo"/>


        <!-- don't edit below this line -->


        <property name="store.dir" value="store"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>


        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>


        <delete dir="${store.dir}"/>
        <mkdir dir="${store.dir}"/>


        <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
            <zipgroupfileset dir="dist" includes="*.jar"/>
            <zipgroupfileset dir="dist/lib" includes="*.jar"/>


            <manifest>
                <attribute name="Main-Class" value="${main.class}"/>
                <attribute name="SplashScreen-Image" value="apotec/logoSplash.gif"/>
            </manifest>
        </jar>


        <zip destfile="${store.jar}">
            <zipfileset src="${store.dir}/temp_final.jar"
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>


        <delete file="${store.dir}/temp_final.jar"/>


    </target>


    <!--> Fim do codigo para arquivo unico -->


</project>
Veja que nas tags em azul  do manifest foi adicionado o caminho da imagem que será apresentada pela tela do Splash Screen no exemplo a linha editada será:
<attribute name="SplashScreen-Image" value="apotec/logoSplash.gif"/>


O arquivo único jar  gerado com todas as bibliotecas, manifest e a tela Splash Screen será colocado na pasta store do projeto.

Compartilhar

Você Gostou deste artigo?

E-mail Atualizações gratuitas!
*Seu email não será compartilhado com ninguém.




0 comentários:

Postar um comentário