[Resolvido]Tratar objetos de outra classe com Threads

2 respostas
jackads

Olá pessoal,

Sou iniciante em Java e tenho algumas dúvidas. Para praticar um pouco aqui o uso de Threads eu tentei criar uma simulação pequena de arena de luta onde os threads vão rodando e exibindo mensagens de acordo com a condição dos "lutadores". Sei que parece tosco mas não consigo pensar em exemplo melhor no momento.
O que acontece é que eu não sei como posso passar os objetos por argumento para serem tratados no Thread, não sei nem se isso é possível. Vou tentar ilustrar aqui o máximo que puder... Se ficar ruim por aqui eu posto no pastebin, sei lá.

public class TesteMain {
public static void main(String[] args) {
	...
	...
	...
	//Criações de objetos e setters
	...
	...
	...
	
	Lutador lutador = new Lutador();
	lutador.setAtaque(atk1);
	lutador.setDefesa(2);
	lutador.setHp(10);
	lutador.setNome("Bruce");

	...
	...
	...
	//Mais criações de objetos e setters
	...
	...
	...

	ThreadLuta threadLuta = new ThreadLuta();
	Thread tLuta = new Thread(threadLuta);
	tLuta.start();

}

Aqui eu crio a classe do Thread, e tento acessar o lutador que está no main, e obviamente não funciona já que é outra classe e não tem nenhum objeto criado na classe do Thread e nada passando por argumento.
Mas não posso passar o objeto lutador por argumento pelo "run()" porque o run é do Runnable, não funciona. Se eu passar o objeto lutador em outra parte (método) da classe vai ficar limitado àquele escopo apenas e não vai pegar no run.

public class ThreadLuta implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		if(lutador.getHp>0){
			System.out.println("Luta");
		}
	}

}

Não sei se estão entendendo o que quero fazer, mas gostaria de saber se há alguma forma de manipular os objetos criados na classe main em um Thread.

Agradeço muito pela atenção e pela ajuda. Que Deus os abençoe, abraço!

2 Respostas

wfuertes

E se você passar o Lutador (uma referencia) no construtor de ThreadLuta:

public class ThreadLuta implements Runnable{  
  
    private Lutador lutador;

    public ThreadLuta(Lutador lutador) {
         this.lutador = lutador;
    }

    @Override  
    public void run() {  
        // TODO Auto-generated method stub  
        if(lutador.getHp>0){  
            System.out.println("Luta");  
        }  
    }  
}

Daí no método main você faz:

.
.
.
ThreadLuta threadLuta = new ThreadLuta(lutador);
.
.
.

Boa Sorte. T+

jackads

Nossa cara muito obrigado, você resolveu meu problema.
Fico sinceramente agradecido.

Que Deus te abençoe, um abraço irmão!

Criado 13 de outubro de 2011
Ultima resposta 14 de out. de 2011
Respostas 2
Participantes 2