Threads e SWING

3 respostas
4

Olah Pessoal.
Estou com um probleminha em uma aplicação que estou montando.
A aplicação start uma thread que faz a leitura no banco de dados de 1 em 1 min. e atualiza alguns TextFields. Essa thread recebe uma variavel que é o objeto que deve ser buscado no BD.
Ateh ai sem problemas, mas quando eu quero mudar o objeto de busca na thread, nao estou conseguindo. Nao estou tendo acesso a thread que foi iniciada e alterar a sua variavel de busca no BD.

Alguma sugestão.

3 Respostas

R

post seu codigo principalmente a maneira de como vc esta iniciando a Thread, vc herdou Thread ou implemntou Runnable?

4
Olah, eu herdei Thread. Segue abaixo o código da thread.
public class poolmon extends Thread {
    
        String incuba,serial,datain,horain;
        double dados[] = new double [7];
        
        public poolmon (){
        }
        
        
        public void SetIncub (String incu) {
            this.incuba=incu;
        }
        
        public void run (){
            String queryi = "SELECT serial FROM incubadora where alias ='"+incuba+"'";
            System.out.println(queryi);
            
            while (true){

                try {
                    resultset = stm.executeQuery(queryi);
                    if(resultset.next())
                        serial = resultset.getString(1);
                    String query ="SELECT * FROM dados WHERE serial='"+serial+"' order by data desc, indice desc limit 1";
                    System.out.println(query);
                    if (serial!=null){
                        resultset=stm.executeQuery(query);
                    }
                    if(resultset.next()){
                        dados[0]=Double.parseDouble(resultset.getString(2));
                        dados[1]=Double.parseDouble(resultset.getString(3));
                        dados[2]=Double.parseDouble(resultset.getString(6));
                        dados[3]=Double.parseDouble(resultset.getString(5));
                        dados[4]=Double.parseDouble(resultset.getString(4));
                        dados[5]=Double.parseDouble(resultset.getString(8));
                        dados[6]=Double.parseDouble(resultset.getString(7));
                        datain=resultset.getDate(9).toString();
                        horain=resultset.getTime(10).toString();
                        updateMon(dados,datain,horain);
                    }


                }
                catch(SQLException e){
                    System.out.println(e);}
                try{
                    Thread.sleep(45000);
                }catch (Exception e){
                }
            }
            
           
            
        }
© e como eu inicio a thread
private poolmon pooling = new poolmon();
 pooling.SetIncub(jcincub.getSelectedItem().toString());
            pooling.start();
© Obrigado.
L

A thread fica executando para sempre porque tem esse while(true), é o que esta dentro disso que vai ser executado novamente depois de tantos minutos. O sql que faz a busca com o ‘incuba’ esta fora desse while(true), logo ele só vai ser executado na primeira vez e assim permanecera para o resto de sua vida, e ai não adianta vc mudar o valor de incuba que a query já esta la feita, com o valor antigo. Experimenta colocar esse sql dentro do while(true)

Outra coisa, da uma olhada em em PrepareStatement e cria seus sql usando ele
:wink:

Criado 28 de novembro de 2007
Ultima resposta 11 de dez. de 2007
Respostas 3
Participantes 3