Problemas com Threads!

Boa noite.
Será que alguém pode me dizer se tem como eu passar valor de uma thread pra outra?
Tipo tenho um programa que chama uma thread que fica ouvindo uma porta de comunicaçao do meu micro e quando chegar menssagem quero pegar o valor e atribuir a um parametro da minha classe superior. algo assiim.

[quote=worldsoft]Boa noite.
Será que alguém pode me dizer se tem como eu passar valor de uma thrend pra outra?
Tipo tenho um programa que chama uma thrend que fica ouvindo uma porta de comunicaçao do meu micro e quando chegar menssagem quero pegar o valor e atribuir a um parametro da minha classe superior. algo assiim.[/quote]

Não seria Thread??

Desculpe minha ingonorancia claro que Thread. Mais alguém pode me ajudar?

Vc pode fazer o seguinte… no método run da sua thread chamar algum outro método da thread que vai receber o valor.

Esses dias precisei de algo pareciso e funcionou assim. Se tiver dificuldade poste o código.

:stuck_out_tongue:

O Problema é o seguinte: Tenho uma classe com interface gráfica que chama uma thread essa thread fica escultando uma porta e assim que recebe uma menssagem ele chama outra thread que ira execultar o processo. Apos o final do processo da segunda thread, tenho que pegar o valor do processo e retornar pra minha interface gráfica e setar em um dos componentes. Ai que não estou conseguindo retornar o valor da segunda thread pra minha classe de interface. entendeu?

Então, semana passada eu estava com exatamente o mesmo problema. Vou te passar o meu código…

Minha thread:

public void run() {
		try {
			url = new URL(protocolo + ip + ":" + porta + diretorio + leituraA);
			
			conn = url.openConnection();
		    //conn.setConnectTimeout(30000); //Seta um tempo de timeout  
		    //conn.setReadTimeout(30000); //Seta um tempo de timeout
		    
			InputStreamReader in = new InputStreamReader(conn.getInputStream(), Charset.forName("ISO-8859-1"));
		    BufferedReader reader = new BufferedReader(in);
		    File arq = new File("C:\\Tasks\\" + logLeituraA);
		    FileWriter conteudo = new FileWriter(arq, true);
		    PrintWriter saida = new PrintWriter(conteudo, true);
		    String linha = ""; 
		    Time time = new Time(conn.getDate());
		    String timeString = time.toString();
		    
		    while ((linha = reader.readLine()) != null) {	        	
		    	saida.println(linha + "\n" + timeString);		    	   		     	
		    }  
		    reader.close();
		    
		    new Auxiliar().alteraJLabels(timeString, 1); // CLASSE QUE ALTERA Jlabels
		    
		    } catch (MalformedURLException e){ 
		    	new Auxiliar().Aviso("Erro de conexão Leitura_A: " + e.getMessage());		    	
		    	e.printStackTrace();
		    } catch (IOException e) { 
		    	new Auxiliar().Aviso("Erro de conexão Leitura_A: " + e.getMessage());
		    	e.printStackTrace();
		    }   // openConnection() falhou	    
	}

Classe Auxiliar extende Main pq a Main instancia um objeto Tela(onde estão os componentes JLabels que eu quero alterar)

import javax.swing.JOptionPane;

public class Auxiliar extends Main{
	
	public void alteraJLabels(String timeString, int op) {
		a.alteraJLabels(timeString, op);	// a é uma instancia de Tela	
	}
	
	public void Aviso(String erro){
    	JOptionPane.showMessageDialog(null, erro, "", JOptionPane.ERROR_MESSAGE);
    }
}

Classe Main instancia Tela

public class Main {
	 static Tela a = new Tela();
	    
	    public static void main(String args[]) {	
	    	
	    	a.atualiza();
	    	
	        java.awt.EventQueue.invokeLater(new Runnable() {
	            public void run() {	                
	                a.setVisible(true);
	            }
	        });
	    }
}

Método da classe Tela que altera os JLabels

public void alteraJLabels(String texto, int op){
    	switch (op){
    	case 1:
    		jLabel1.setText(texto);
    		break;
    	case 2:
    		jLabel2.setText(texto);
    		break;
    	case 3:
    		jLabel3.setText(texto);
    		break;
    	case 4:
    		jLabel4.setText(texto);
    		break;
    	case 5:
    		jLabel5.setText(texto);
    		break;
    	case 6:
    		jLabel6.setText(texto);
    		break;
    	case 7:
    		jLabel7.setText(texto);
    		break;
    	case 8:
    		jLabel8.setText(texto);
    		break;
    	}
    	
    }

Qualquer dúvida estamos ai. Espero ter ajudado. :smiley:

Falow!!

Uma gambiarra básica… lógica meio doida… mas funcionou!! rsrsrsrs

Pf_Poa agora estou no serviço e sem condições de testar pra ver se o seu código ira me ajudar, logo mais a noite irei testar e amanhã posto o resultado, Por enquanto meu muito obrigado por tentar me ajudar.