Galera, tem como usar mais de uma Thread em uma classe ? Pois estou usando Thread para realizar buscas no banco de dados, mais tem varias buscas na classe e a unica maneira que sei fazer é o doe exemplo abaixo
public class Login implements Runnable
{
public Login ()
{
Thread Login = new Thread(new Login());
Login.start();
}
public void run()
{
//FAZ AS BUSCAS
}
}
Assim como vc instanciou a thread login, pode instanciar outras:
Thread login = new Thread(new Login());
Thread t2 = new Thread(new Login());
Thread t3 = new Thread(new Login());
login.start();
t2.start();
t3.start();
Mas é importante que você leia sobre isso. Paralelismo, programação concorrente, pode se tornar algo difícil de gerenciar.
Disso eu sei mais quero fazer algo +/- assim
Quero evitar que o Swing trave ao executar algum comando em sql.
public void Login ()
{
}
public void Cadastro ()
{
}
login.start;
Cadastro.start;
Quem quer usar threads em Swing normalmente usa um SwingWorker. A vantagem de usar um SwingWorker é que existem métodos já prontos para você indicar o progresso da execução da tarefa (ou seja, se sua tarefa é longa mas pode ser dividida em pedaços, você pode atualizar um Progress Bar de forma relativamente simples) e também para você cancelar a execução de algo que está muito demorado.
Veja mais detalhes em:
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
(Você precisa ler as páginas seguintes a essa também, é claro. Em caso de dúvidas com o inglês, use o Google Translator. )
Olá entanglement, Eu comecei a usar o SwingWorker, estou tendo pouca dificuldade mais ja está atendendo as minas nescessidades, pois a aplicação travava quando dava algum erro no Socket e no Mysql ou quando a conexao estava muito lenta…
Abaixo esta meu código que implementei em uma janela que faz a autenticação do usuário, seria desta forma que eu poderia usar o SwingWorker ?
public void Autentica ()
{
try
{
new SwingWorker()
{
protected Object doInBackground() throws Exception
{
try
{
//faz a conexao ao banco de dados
ConectaDb();
System.out.println("TENTANDO AUTENTICAR USUÁRIO");
//string com o comando em sql
String sqlBuscaLogin = "SELECT Perfil.PerfilRegistro, Perfil.PerfilPNome, Perfil.PerfilSNome, Perfil.PerfilMsgPessoal, Perfil.PerfilEmail, Perfil.PerfilRg, Perfil.PerfilDtNasc, Perfil.PerfilCep, Perfil.PerfilFoto, Perfil.PerfilUser, Perfil.PerfilSenha, "
+ "Conexao.ConRegistro, Conexao.ConUser, Conexao.ConPorta, Conexao.ConIp "
+ "FROM Perfil "
+ "INNER JOIN Conexao ON Perfil.PerfilRegistro = Conexao.ConUser "
+ "WHERE `PerfilUser` = '" + jUser.getText() + "' AND `PerfilSenha` = '" + jSenha.getText() + "'";
//+ "SELECT * FROM `Perfil` WHERE `PerfilUser` = '" + jUser.getText() + "' AND `PerfilSenha` = '" + jSenha.getText() + "'";
try
{
//executa o sql
ResultSet RBU = getDBStm().executeQuery(sqlBuscaLogin);
//se existir algum usuário é executado o if abaixo
if (RBU.next())
{
//retoma o primeiro nome do usuário
setUserPNome (RBU.getString ("Perfil.PerfilPNome"));
//retorna o segundo nome do usuário
setUserSNome (RBU.getString ("Perfil.PerfilSNome"));
//retorna a mensagem pessoal do usuário
setUserMPessoal (RBU.getString ("Perfil.PerfilMsgPessoal"));
//retorna o email do usuárop
setUserEmail (RBU.getString ("Perfil.PerfilEmail"));
//retorna meu id de registro
setUserRegistro (RBU.getInt ("Perfil.PerfilRegistro"));
//adiciona dados de conexao
AddConexao ();
}
//caso não encontre o usuario no banco de dados
else
{
//Mostra mensagem ao usuário
Logando(false);
JOptionPane.showMessageDialog(null, "ATENÇÃO USUÁRIO\nUSUÁRIO NÃO ENCONTRADO", "Atenção", JOptionPane.DEFAULT_OPTION);
}
}
catch(Exception ex)
{
//exibe advertencia em caso de erro ao tentar efetuar o login
JOptionPane.showMessageDialog(jLogin, "ERRO AO TENTAR REALIZAR LOGIN\nERRO:1-0001", "Atenção", JOptionPane.ERROR_MESSAGE);
System.out.println("ERRO AO REALIZAR BUSCA DE LOGIN\nERRO: " + ex);
}
}
catch (Exception ex)
{
}
return null;
}
protected void done()
{
//System.out.println("haaaassd");
}
}.execute();