Problemas cabulosos com JOptionPane[RESOLVIDO]

Olá a todos, preciso de uma ajuda com o JOptionpane:

É o seguinte: Tenho um projeto java que faz uma consulta no banco de dados access e, se ele encontra, retorna as informações no form.
Se não encontra, ele informa, em um JOptionPane que nenhum registro foi encotrado!

O problema ocorre depois que o JOptionPane é executado. Depois que ele apresenta a mensagem, eu pressiono o ok e continuo a pesquisa.

Quando fecho o form, a aplicação toda trava, literalmente, e não consigo mais executar qualquer ação do sistema. Ele tem um form com JMenu, e este é o

form principal, ele que chama o form da consulta e ele que trava inteiro. O problema é que é ele que é o principal. Já procurei saber se era problemas com o botão fechar,

mas ele está certo. Me ajudem… :shock:

[color=blue]Gente, to desesperado, me ajudem por favor, este projeto e mto importante!!! [/color]

E como que eu faço isso ? è so colocar o JOptionPane dentro desse try ? num entendi bem isso!

try {  
//aqui coloque seu código suspeito
} catch (Exception e) {  
//aqui coloque uma mensagem, pode ser um System.out.println();
} 

O que acontece é o seguinte, não imagino muito bem seu problema, mas pode ser(ou não) resolvido da seguinte forma:
Pegue a parte do seu código que pode ser a responsável pelo travamento, e a coloque dentro do TRY, dessa forma, se algo sair errado, vai entrar no CATCH e você verá a mensagem que comprova o erro.

E mais, se der erro dentro do try, o programa não trava.

Ele executa o código do JOptionPane perfeitamente, mas o erro acontece pq ele executa o JOptionPane.

Resumindo : Abro o form usando o JMenu de um outro form faço uma pesquisa que num tem no banco.

Ele apresenta a mensagem corretamentemas, quando eu fecho o form de consulta, trava o sistema todo, não permitindo nem ao menos fechar. (a não ser pelo gerenciador de tarefas!)

Então, que tal você postar a parte do código que acha estar dando erro?

Vai ser mais fácil.

Esse é3 o botão que chama o JOptionPane (o mesmo que está me dando dor de cabeça)

[code]btnPesquisar = new JLabel();
btnPesquisar.setBounds(350, 25, 48, 48);
ImageIcon pesquisar = new ImageIcon(“src/Imagens/procurar.png”);
btnPesquisar.setIcon(pesquisar);
btnPesquisar.setToolTipText(“Pesquisar campos”);
btnPesquisar.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent arg0) {

		}
		public void mousePressed(MouseEvent arg0) {}
		public void mouseExited(MouseEvent arg0) {}
		public void mouseEntered(MouseEvent arg0) {}
		
		public void mouseClicked(MouseEvent arg0) {
			Conexao conex = new Conexao();
			
			String sql = "SELECT * FROM TBUSUARIO WHERE cpf = '"+ txtPesquisa.getText()+"'";
			
			conex.Conecta();
			
			try{
				meustate = Conexao.con.createStatement();
				resultset=meustate.executeQuery(sql);
				resultset.next();
				
				txtNome.setText(resultset.getString("nome"));
				txtCidade.setText(resultset.getString("cidade"));
				txtComplemento.setText(resultset.getString("complemento"));
				txtdataNascimento.setText(resultset.getString("datanascimento"));
				txtEndereco.setText(resultset.getString("endereco"));
				txtBairro.setText(resultset.getString("bairro"));
				txtCpf.setText(resultset.getString("cpf"));
				txtNumero.setText(resultset.getString("numero"));
				if( resultset.getString("sexo").equals(1)) {
					rbFeminino.setSelected(true);
				}
				else{
					rbMasculino.setSelected(true);
				}
				if (resultset.getString("informacao").equalsIgnoreCase("sim")){
					cbMensagem.setSelected(true);
				}
				else{
					cbMensagem.setSelected(false);
				}
				txtEmail.setText(resultset.getString("email"));
				cmbEstado.setSelectedIndex(resultset.getInt("estado"));
				btnAlterar.setEnabled(true);
				btnExcluir.setEnabled(true);
				
			}
			catch(SQLException erro){
				JOptionPane.showMessageDialog(null,"Nenhum registro encontrado","Atencao",JOptionPane.WARNING_MESSAGE);
				//String message = "Nenhum registro encontrado !";
				//JMessage msm = new JMessage(message);
				

				txtNome.setText("");
				txtCidade.setText("");
				txtComplemento.setText("");
				txtdataNascimento.setText("");
				txtEndereco.setText("");
				txtBairro.setText("");
				txtCpf.setText("");
				txtNumero.setText("");
				txtEmail.setText("");
				
				cmbEstado.setSelectedIndex(0);
				
				txtPesquisa.setText("");
				
				rbFeminino.setSelected(false);
				rbMasculino.setSelected(false);
				
				cbMensagem.setSelected(false);
				txtEmail.setText("");
				
			}
			conex.Fecha();
			
		}
	});[/code]

E essa é a classe que trava quando ele é executado

[code]
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;

public class TelaPrincipal extends JFrame {

	private JLabel fundo;
	ImageIcon background = new ImageIcon("src/Imagens/3d.jpg");
	
TelaPrincipal(){

	super("Projeto DS-II - versão 1.0 ");
	
	Container janela = this.getContentPane();
	setLocationRelativeTo(null);
	janela.setLayout(null);
		
	JMenuBar bar = new JMenuBar();
	
	JMenu arquivo = new JMenu();
	arquivo.setText("Arquivo");
	
	JMenu cadastrar = new JMenu();
	cadastrar.setText("Cadastrar");
	
	JMenu consultar = new JMenu();
	consultar.setText("Consultar");
	
	JMenu relatorio = new JMenu();
	relatorio.setText("Relatórios");
	
	JMenu utilitario = new JMenu();
	utilitario.setText("Utilitários");
	
	JMenu ajuda = new JMenu();
	ajuda.setText("Ajuda");
	
	JMenuItem sair = new JMenuItem(new ImageIcon("src/Imagens/sair.png"));
	sair.setText("Sair");
	sair.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					if(JOptionPane.showConfirmDialog(null,"Deseja fechar a aplicação?","Atenção:",JOptionPane.YES_NO_OPTION)==0){     
							TelaPrincipal.this.dispose();     
					}	
				}
			});
	
	JMenuItem usuario = new JMenuItem(new ImageIcon("src/Imagens/pen.png"));
	usuario.setText("Usuário");
	usuario.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					CadUsuario cad = new CadUsuario();
					cad.setTitle("Cadastro de Usuários");
					cad.setSize(700,500);
					cad.setResizable(false);
					cad.setLocationRelativeTo(null);
					cad.setVisible(true);
					cad.setModal(true);
					
				}
			});
	
	JMenuItem genero = new JMenuItem();
	genero.setText("Genero");
	genero.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					CadGenero cad = new CadGenero();
					cad.setTitle("Cadastro de Gêneros");
					cad.setSize(400,300);
					cad.setResizable(false);
					cad.setLocationRelativeTo(null);
					cad.setVisible(true);
					cad.setModal(true);
					//cad.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
				}
			});
	
	JMenuItem dvd = new JMenuItem();
	dvd.setText("DVD");
	dvd.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					CadDvd cad = new CadDvd();
					cad.setTitle("Cadastro de DVD");
					cad.setSize(400,300);
					cad.setResizable(false);
					cad.setLocationRelativeTo(null);
					cad.setVisible(true);
					cad.setModal(true);
					//cad.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
				}
			});
	
	JMenuItem cli = new JMenuItem();
	cli.setText("Cliente");
	cli.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					CadCli cad = new CadCli();
					cad.setTitle("Cadastro de Cliente");
					cad.setSize(800,500);
					cad.setResizable(false);
					cad.setLocationRelativeTo(null);
					cad.setVisible(true);
					cad.setModal(true);
					//cad.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
				}
			});
	
	JMenuItem emp = new JMenuItem();
	emp.setText("Emprestimo");
	emp.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					CadEmprestimo cad = new CadEmprestimo();
					cad.setTitle("Cadastro de Emprestimos");
					cad.setSize(800,500);
					cad.setResizable(false);
					cad.setLocationRelativeTo(null);
					cad.setVisible(true);
					cad.setModal(true);
					//cad.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
				}
			});
	JMenuItem conUsuario = new JMenuItem();
	conUsuario.setText("Consulta Usuário");
	conUsuario.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					ConUsuario cad = new ConUsuario();
					cad.setTitle("Consulta de Usuários");
					cad.setSize(700,500);
					cad.setResizable(false);
					cad.setLocationRelativeTo(null);
					cad.setVisible(true);
					cad.setModal(true);
					
				}
			});
	
	JMenuItem conGenero = new JMenuItem();
	conGenero.setText("Consulta Gênero");
	conGenero.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					ConGenero cad = new ConGenero();
					cad.setTitle("Consulta de Gênero");
					cad.setSize(700,500);
					cad.setResizable(false);
					cad.setLocationRelativeTo(null);
					cad.setVisible(true);
					cad.setModal(true);
					
				}
			});
	
	JMenuItem help = new JMenuItem(new ImageIcon("src/Imagens/ajuda.png"));
	help.setText("Ajuda");
	help.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent event){
					
				}
			});
	
	JMenuItem sobre = new JMenuItem(new ImageIcon("src/Imagens/sobre.png"));
	sobre.setText("Sobre");
	sobre.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent arg0) {
					Sobre s = new Sobre();
					
				}
	});
	
	//
	sobre.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, InputEvent.CTRL_MASK));
	sair.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
	usuario.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK));
	genero.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK));
	dvd.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_MASK));
	cli.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
	emp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK));
	//
	
	arquivo.add(sair);
	
	cadastrar.add(usuario);
	cadastrar.add(genero);
	cadastrar.add(dvd);
	cadastrar.add(cli);
	cadastrar.add(emp);
	
	consultar.add(conUsuario);
	consultar.add(conGenero);
	
	ajuda.add(help);
	ajuda.add(sobre);
	
	bar.add(arquivo);
	bar.add(cadastrar);
	bar.add(consultar);
	bar.add(relatorio);
	bar.add(utilitario);
	bar.add(ajuda);
	
	this.setJMenuBar(bar);
	
	fundo = new JLabel();
	fundo.setOpaque(true);
	fundo.setIcon(background);
	fundo.setBounds(0,0,1000,700);
	janela.add(fundo);
	
	FecharForm dd = new FecharForm();
     this.addWindowListener(dd);
     
     TelaPrincipal.this.getRootPane().putClientProperty("Window.alpha", new Float(0.5f));

}

private class FecharForm implements WindowListener{
	
	public void windowActivated(WindowEvent arg0) {}		
	public void windowClosed(WindowEvent arg0) {}		
	public void windowClosing(WindowEvent arg0) {
		if(JOptionPane.showConfirmDialog(null,"Deseja fechar a aplicação?","Atenção:",JOptionPane.YES_NO_OPTION)== 0){     
            TelaPrincipal.this.setDefaultCloseOperation(EXIT_ON_CLOSE);     
        }
		else{     
			TelaPrincipal.this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);      
        }
		
	}
    public void windowDeactivated(WindowEvent arg0) {}		
	public void windowDeiconified(WindowEvent arg0) {}		
	public void windowIconified(WindowEvent arg0) {}
	public void windowOpened(WindowEvent arg0) {}
}

}[/code]

Observação: enviei a classe principal toda, pois não sei se um erro em outro lugar pode afetar em sua avaliação, desculpe se trapalhar

Ocorre algum tipo de erro no console amigo ?
se sim poste para podermos verificar.

ja verificou se a aplicação estora o processador quando esta em funcionamento ?

Meu pc tem processador i3… Num pode ser isso!!!

Ainda num consegui resolver… este ta dando um trabalho…

amigo dentro do seu catch

coloque um erro.printStackTrace();
e verifique no console se acontece algum erro. se sim poste fazendo favor.

Tente criar uma thread para tal processo, deve resolver.

Abraços.

Diguinho.Max…

já coloquei, mas num é um erro que aparece no console…

Gabriel Lopes…

Como eu faço isso ? Na real, mal sei o q é uma thread…

Uma thread vai me ajudar de que maneira ? Como posso aplicá-la no projeto, de modo que acabe com meu problema ?

[color=green][b]Olá a todos… Obrigado pela ajudar, mas descobri o erro de uma forma um tanto curiosa:

Revoltado com o projeto dando erro, resolvi começar um novo, utilizando o antigo como base para saber

se era erro no projeto. Enfim, descobri que quando abria um JDialog() a partir do Menu e declarava-o como

.setModal(true) , era só abrir um JOptionPane para ele dar o erro!!

Então, coloquei setModal(false) e testei: Funcionou! No entanto, num entendi pq o o setModal tava dando esse erro,

além do q num consigo usar ele nem mesmo numa aplicação normal. Todos os projetos, coloco setModal, mas ele num

funciona nem o q tinha q funcionar… Agradeço mesmo a ajuda…[/b] [/color]

Tente usar um profiler para tentar identificar se está ocorrendo algum deadLock.
Se estiver usando o NetBeans, ele tem um nativo, se estiver usando o Eclipse, pode usar o JVisualVM que vem dentro da pasta bin do JDK (creio que a partir do 1.6).

Não ocorre qualquer exceção? Ou o tratamento de exceções está “engulindo” as mesmas?

try { //do something } catch (Exception e) { //não há código aqui... }

[quote=ElesisLink]E como que eu faço isso ? è so colocar o JOptionPane dentro desse try ? num entendi bem isso![/quote]Não disse que era para você usar o try-catch, mas que, talvez, estivesse utilizando-o da forma como coloquei. Porém, por sua resposta, creio que não seja o caso.
De qualquer forma, concordo com o Javax2011, sem que você poste o código, fica difícil ajudá-lo e ficamos na pura especulação.