Execução de Aplicação x Barra de Tarefas

0 respostas
A

Pessoal,

Quando executo o meu aplicativo, enquanto a conexão e a estrutura do banco de dados é verificada eu fico mostrando uma Splash Screen.

Depois que este processo de inicialização é efetuado eu chamo um método para obter o código e a senha do usuário.

O problema é que quando a Splash Screen é exibida não aparece o aplicativo na barra de tarefas. Ou seja, só consigo ir para o aplicativo através do CTRL-TAB. Este problema também ocorre quando se está na tela de login.

Sei que o problema está na classe que está sendo extendida, no caso é a JDialog.

Já tentei mudar a tela de login de JDialog para JFrame, mas ao fazer isto ele não fica na tela esperando informar o usuário e a senha, ele fecha a tela automaticamente. Enquanto está como JDialog eu consigo fazer um SETMODAL(TRUE), e isso faz com que ele fique aguardando a resposta.

Tentei pegar alguns exemplos aqui no fórum, mas nenhum deles resolveu o meu problema.

Abaixo estou colocando os fontes para melhor entendimento:

Esta é a classe principal, de onde a Splash Screen (cujo nome é “Splash”) está sendo chamada:

package loterias;

/* import contrib.ch.randelshofer.quaqua.util.Images; */
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.event.*;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.jvnet.substance.*;
import org.jvnet.substance.watermark.*;


/**
 * Classe principal do sistema MAINCLASS.
 */
public class Main {
    
    /**
     * @param args Argumentos da linha de comando
     */
    public static void main(String[] args) {
        
       CFGManager cfgInstance = CFGManager.getInstance();
       
       SubstanceLookAndFeel.setCurrentTheme(cfgInstance.getValueString("LOOK_AND_FEEL"));
       SubstanceLookAndFeel.setCurrentWatermark(new SubstancePlanktonWatermark()); 

       try {
         UIManager.setLookAndFeel(cfgInstance.getValueString("CLASS_LOOK_AND_FEEL"));
       } catch (UnsupportedLookAndFeelException ulafe) {
         Utilidades utilInstance = Utilidades.getInstance();
         String stackMensagem = utilInstance.montaMensagemErro(ulafe.toString(),ulafe.getStackTrace());
         utilInstance.exibeMensagem("Erro","Não foi possível setar o 'LookAndFeel' como '" + cfgInstance.getValueString("LOOK_AND_FEEL") + "'.",stackMensagem,utilInstance.MSGERROR);
       } catch (ClassNotFoundException cnfe) {
         Utilidades utilInstance = Utilidades.getInstance();
         String stackMensagem = utilInstance.montaMensagemErro(cnfe.toString(),cnfe.getStackTrace());
         utilInstance.exibeMensagem("Erro","Classe LookAndFeel '" + cfgInstance.getValueString("CLASS_LOOK_AND_FEEL") + "' não foi encontrada.",stackMensagem,utilInstance.MSGERROR);
       } catch (InstantiationException ie) {
         Utilidades utilInstance = Utilidades.getInstance();
         String stackMensagem = utilInstance.montaMensagemErro(ie.toString(),ie.getStackTrace());
         utilInstance.exibeMensagem("Erro","Falha ao instanciar a classe LookAndFeel '"+ cfgInstance.getValueString("CLASS_LOOK_AND_FEEL") + "'",stackMensagem,utilInstance.MSGERROR);
       } catch (IllegalAccessException iae) {
         Utilidades utilInstance = Utilidades.getInstance();
         String stackMensagem = utilInstance.montaMensagemErro(iae.toString(),iae.getStackTrace());
         utilInstance.exibeMensagem("Erro","Acesso negado a classe LookAndFeel '" + cfgInstance.getValueString("CLASS_LOOK_AND_FEEL") + "'",stackMensagem,utilInstance.MSGERROR);
       }
       
       SubstanceLookAndFeel.hideMenuSearchPanels();
         
       Splash splashInstance = Splash.getInstance("image/logo.gif");
       splashInstance.addManualProgressBar(0, 18);   // 18 = Número de passos a serem efetuados na inicialização
       splashInstance.setProgressBarString("Inicializando o sistema ...");
       splashInstance.showSplash();
/*        
       for (int i = 0; i < 20000; i++) {
          System.out.println(i);
       }
*/
       
       InicializaSistema initInstance = InicializaSistema.getInstance();
       initInstance.Inicializa();
              
       splashInstance.hideSplash();

       CadUsuarios usuLogin = new CadUsuarios();
       
       if (usuLogin.loginSistema()) {
          MPrincipal menuPrinc = MPrincipal.getInstance();
          menuPrinc.initApplication();
       } else {
          System.exit(0);
       }
         
    }
    
}

Esta é a classe Splash:

package loterias;


import java.awt.Toolkit;
import java.awt.event.*;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.*;

public class Splash extends JWindow {

	private JLabel bitmapLabel;
	private Timer timeoutTimer = null;
	private Timer progressTimer = null;
	private int timeout = 0;
        private int progressBarSmoothness = 100;
        private JProgressBar bar = null;
        
        private static Splash instancia;	
	private URL bitmapURL = null;
        
        	
        /**
	 * Constrói uma nova tela de abertura com uma imagem. Para exibir esta tela de entrada,
	 * use <code>showSplash()</code>.
	 * 
	 * @param filename O caminho do arquivo de imagem a ser exibida.
	 */
	private Splash(URL filename) {
		this.bitmapURL = filename;
		this.init();
	}

	
        /**
	 * Constrói uma nova tela de abertura com uma imagem. Para exibir esta tela de entrada,
	 * use <code>showSplash()</code>.
	 * 
	 * @param filename Nome da imagem a ser exibida.
	 */
	private Splash(String filename) {
           File bitmapFile = new File(filename);

           try {
              this.bitmapURL = bitmapFile.toURL();
           } catch(MalformedURLException ignore) {
           }
           this.init();
	}

        
        /** 
         * Retornar a instância da classe Utilidades. 
         * @param filename Nome do arquivo de imagem a ser exibido na tela de abertura.
         */
        protected Splash getInstance(URL filename) {
           if (instancia == null) {
              instancia = new Splash(filename);
           }
           return instancia;
        }


        /** 
         * Retornar a instância da classe Splash. 
         * @param filename Nome do arquivo de imagem a ser exibido na tela de abertura.
         */
        protected static Splash getInstance(String filename) {
           if (instancia == null) {
              instancia = new Splash(filename);
           }
           return instancia;
        }


        /** 
         * Retornar a instância da classe Splash. 
         */
        protected static Splash getInstance() {
           return instancia;
        }


        /**
	 * Inicializa a tela de abertura a partir de uma JWindow e adiciona um JLabel contendo uma imagem.
	 * Atualiza a posição da janela para o centro da tela.
	 */
	private void init() {
           this.bitmapLabel = new JLabel();
           ImageIcon bitmapImage = new ImageIcon(Toolkit.getDefaultToolkit().createImage(this.bitmapURL));
           int height = bitmapImage.getIconHeight();
           int width = bitmapImage.getIconWidth();
           bitmapLabel.setIcon(bitmapImage);
           bitmapLabel.setSize(width, height);
           bitmapLabel.setLocation(0, 0);
           this.getContentPane().setLayout(null);
           this.getContentPane().add(bitmapLabel, null);
           this.setSize(width, height);
           this.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - height) / 2);
	}

	/**
	 * Exibe a tela de abertura. A mesma será centralizada na tela. O contador de tempo (Timer)
	 * será iniciado quando este método for chamado, e não quando ele for instanciado. 
	 */
	protected void showSplash() {
		if(timeoutTimer != null) {
			timeoutTimer.start();
		}

		if(progressTimer != null) {
			progressTimer.start();
		}
                
                this.setVisible(true);
		
	}

	/**
	 * Esconde a tela de abertura e pára a execução do contador de tempo (Timer).
	 */
	protected void hideSplash() {
		this.setVisible(false);

		if(timeoutTimer != null) {
			timeoutTimer.stop();
			timeoutTimer = null;
		}

		if(progressTimer != null) {
			progressTimer.stop();
			progressTimer = null;
		}
	}

	/**
	 * Prepara a tela de abertura para ser fechada após a passagem de um certo tempo.
	 * A tela de abertura poderá ser escondida ao final do contador de tempo (Timer) <b>e</b> em
	 * um clique, ou o que ocorrer primeiro.
	 * 
	 * @param timeout Tempo, em milisegundos, em que a tela de abertura ficará sendo exibida.
	 */
	protected void hideOnTimeout(int timeout) {
		this.timeout = timeout;
		timeoutTimer = new Timer(timeout, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				hideSplash();
			}
		});
		timeoutTimer.setRepeats(false);
	}

	/**
	 * Prepara a tela de abertura para ser fechada após um clique.
	 * A tela de abertura poderá ser escondida ao final do contador de tempo (Timer) <b>e</b> em
	 * um clique, ou o que ocorrer primeiro.
	 */
	protected void hideOnClick() {
		this.addMouseListener(new MouseAdapter() {

			/**
			 * Esconde a tela de abertura quando ocorrer um clique do mouse.
			 * 
			 * @see java.awt.event.MouseListener#mouseClicked(MouseEvent)
			 */
			public void mouseClicked(MouseEvent e) {
				hideSplash();
			}
		});
	}

	/**
	 * Adicionar uma barra de progressão na tela de abertura. Se uma outra tiver sido adicionada antes
	 * a mesma será substituída pela primeira. A barra de progressão ficará abaixo da imagem.
	 * Você ainda não tem os valores mínimos e máximos. Eles serão aplicados nos métodos posteriores.
	 */
	private void addProgressBar() {
		if(bar != null) {
			this.remove(bar);
			this.setSize(this.getWidth(), this.getHeight() - 13);
		}

		progressTimer = null;
		bar = new JProgressBar();
		bar.setSize(this.getWidth(), 13);
                bar.setForeground(new java.awt.Color(0, 0, 0));
                bar.setLocation(0, this.getHeight());
                this.setSize(this.getWidth(), this.getHeight() + 13);
		this.getContentPane().add(bar, null);
	}

	/**
	 * Adiciona uma barra de progressão na tela de abertura, que será atualizada automaticamente.
	 * A barra de progressão será configurada quando o progresso completar o tempo do contador (Timer)
	 * setado por <code>hideOnTimeout(int)</code>.
	 * Apenas uma barra de progressão pode ser adicionada nada tela de abertura ao mesmo tempo. 
	 * Adicionando uma segunda barra de progressão você estará sobrepondo a primeira.
	 * @see #hideOnTimeout(int)
	 */
	protected void addAutoProgressBar() {
		this.addManualProgressBar(0, progressBarSmoothness);
		progressTimer = new Timer(timeout / progressBarSmoothness, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setProgressBarValue(getProgressBarValue() + 1);
			}
		});
	}

	/**
	 * Adiciona uma indeterminada JProgressBar na tela de abertura que será atualizada quando
	 * esta tela for exibida.
	 * Somente uma barra de progressão pode ser adicionada ao mesmo tempo. 
	 * Adicionando uma segunda barra de progressão você estará sobrepondo a primeira.
	 */
	protected void addAutoProgressBarIndeterminate() {
		this.addProgressBar();
		bar.setIndeterminate(true);
	}

	/**
	 * Adiciona uma JProgressBar na tela de abertura que poderá ser atualizada manualmente.
	 * Somente uma barra de progressão pode ser adicionada ao mesmo tempo. 
	 * Adicionando uma segunda barra de progressão você estará sobrepondo a primeira.
	 * 
	 * @param min Valor mínimo da barra de progressão.
	 * @param max Valor máximo da barra de progressão.
	 * @see #setProgressBarValue(int)
	 * @see #getProgressBarValue()
	 */
	protected void addManualProgressBar(int min, int max) {
		this.addProgressBar();
		bar.setMinimum(min);
		bar.setMaximum(max);
	}

	/**
	 * Atualizar o valor da barra de progressão na tela com um novo valor.
	 * @param value Novo valor da barra de progressão.
	 */
	protected void setProgressBarValue(int value) {
		if(bar != null) {
			bar.setValue(value);
		} else {
			throw new IllegalStateException("Add a progress bar before trying to change it.");
		}
	}

	/**
	 * Obtém o valor corrente da barra de progressão.
	 * @return Valor corrente da barra de progressão.
	 */
	protected int getProgressBarValue() {
		if(bar != null) {

			return bar.getValue();
		} else {
			throw new IllegalStateException("Add a progress bar before trying to access it.");
		}
	}

	/**
	 * Atualiza a mensagem de texto a ser exibida na barra de progressão. 
         * Se a mensagem for nula será exibido o percentual.
	 * @param text Texto a ser exibido na barra de progressão.
	 */
	protected void setProgressBarString(String text) {
		if(bar != null) {
                   
                        CFGManager cfgInstance = CFGManager.getInstance();
                   
                        bar.setFont(new java.awt.Font(cfgInstance.getValueString("BAR_FONT_NAME"),
                                                      0,
                                                      cfgInstance.getValueInteger("BAR_FONT_SIZE")));
                        bar.setForeground(new java.awt.Color(cfgInstance.getValueInteger("BAR_FONT_COLOR_R"),
                                                             cfgInstance.getValueInteger("BAR_FONT_COLOR_G"),
                                                             cfgInstance.getValueInteger("BAR_FONT_COLOR_B")));
                        
			if(text != null) {
				bar.setStringPainted(!text.equals(""));
			}

			bar.setString(text);
		} else {
			throw new IllegalStateException("Add a progress bar before trying to change it.");
		}
	}

	/**
	 * Exibe o percentual do progresso na barra de progressão.
	 */
	protected void addProgressBarPercent() {
		if(bar != null) {
			bar.setString(null);
			bar.setStringPainted(true);
		} else {
			throw new IllegalStateException("Add a progress bar before trying to change it.");
		}
	}

}

Esta é o método onde é feito o login (o “dTela” é um JDialog):

protected Boolean loginSistema() {
      
      opEscolha = false;
      
      JButton btOk = utilInstance.configuraJButton("OK",'O',new javax.swing.ImageIcon("image/ok.gif"),dTela);
      JButton btCancelar = utilInstance.configuraJButton("Cancelar",'C',new javax.swing.ImageIcon("image/cancelar.gif"),dTela);
       
      JLabel lbcdUsuario = utilInstance.configuraJLabel("Usuário:");
      Dimension lbcdUsuarioSize = lbcdUsuario.getPreferredSize();
       
      JLabel lbtxSenha = utilInstance.configuraJLabel("Senha:");
      Dimension lbtxSenhaSize = lbtxSenha.getPreferredSize();
      
      tfcdUsuario = utilInstance.configuraJTextField(null,10,dTela);
      
      pftxSenha = utilInstance.configuraJPasswordField(null,10,dTela);
      
      dTela.setModal(true);
      dTela.getContentPane().setLayout(null);
      dTela.setTitle("Loterias - Login");
      dTela.getContentPane().add(btOk,null);
      dTela.getContentPane().add(btCancelar,null);
      dTela.getContentPane().add(lbcdUsuario,null);
      dTela.getContentPane().add(lbtxSenha,null);
      dTela.getContentPane().add(tfcdUsuario,null);
      dTela.getContentPane().add(pftxSenha,null);
      dTela.setSize(360, 180);
      
      dTela.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - dTela.getSize().width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - dTela.getSize().height) / 2);

      lbcdUsuario.setBounds((dTela.getSize().width / 2) - (lbcdUsuarioSize.getSize().width + 50),
                            (dTela.getSize().height / 2) + (lbcdUsuarioSize.getSize().height - 80),
                            lbcdUsuarioSize.getSize().width,
                            lbcdUsuarioSize.getSize().height);
      
      tfcdUsuario.setBounds(lbcdUsuario.getX() + lbcdUsuario.getSize().width + 10 ,
                            (dTela.getSize().height / 2) + (tfcdUsuario.getSize().height - 87),
                            tfcdUsuario.getSize().width,
                            tfcdUsuario.getSize().height);

      lbtxSenha.setBounds((dTela.getSize().width / 2) - (lbtxSenhaSize.getSize().width + 50),
                          lbcdUsuario.getY() + lbcdUsuario.getSize().height + 10,
                          lbtxSenhaSize.getSize().width,
                          lbtxSenhaSize.getSize().height);
      
      pftxSenha.setBounds(lbtxSenha.getX() + lbtxSenha.getSize().width + 10,
                          lbcdUsuario.getY() + lbcdUsuario.getSize().height + 10,
                          tfcdUsuario.getSize().width,
                          tfcdUsuario.getSize().height);
            
      btOk.setBounds((dTela.getSize().width / 2) - (btOk.getSize().width + 10),
                     (dTela.getSize().height / 2) + (btOk.getSize().height - 15),
                     btOk.getSize().width,
                     btOk.getSize().height);

      btOk.addActionListener(new btOkActionListener());
            
      btCancelar.setBounds((dTela.getSize().width / 2) + 10,
                           (dTela.getSize().height / 2) + (btCancelar.getSize().height - 15),
                           btCancelar.getSize().width,
                           btCancelar.getSize().height);
      btCancelar.addActionListener(new btCancelarActionListener());
      
      dTela.setVisible(true);
      
      return opEscolha;
             
   }

Alguém poderia me indicar o que preciso mudar ou então qual a classe que devo utilizar para funcionar do jeito esperado?

[/b][/code]

Criado 16 de janeiro de 2007
Respostas 0
Participantes 1