Sincronização Thread

Boa tarde Pessoal!

Estou com dificuldade em fazer sincronização com 2 Threads.
Criei um programa que cria um objeto Robot, e faz com que o mouse fique se movimentando pela tela, porém, gostaria de fazer com que, ao apertar a tecla “ESC”, o programa pare. Para isso, dividi as funções em 2 Threads, conforme abaixo:
[list]Thread 1 - Criação do Objeto Robot, e acionamento do método mouseMove();[/list]
[list]Thread 2 - Implementação da Interface KeyListener em um JFrame invisível;[/list]

Entretanto, a sincronização entre as 2 Threads não está funcionando.
Se alguém puder me ajudar, segue o código abaixo:

[code]//Thread 1
import java.awt.;
import java.awt.event.
;

class TestThread1 extends Thread{

public void run(){
	try{
		Robot robot = new Robot();
		int x, y;
		for(x=0; x<1280; x++){
			for(y=0;y<1024;y++){
				//TestThread1.sleep(1);
				robot.mouseMove(x,y);
			}
		}
	}
	catch(AWTException e){
		System.err.println("Erro ao Criar o Robô");
	}
}

}[/code]

[code]//Thread 2
import java.awt.;
import java.awt.event.
;
import javax.swing.*;

class TestThread2 extends Thread implements KeyListener{

JFrame frame=new JFrame();

public void run(){
	frame.addKeyListener(this);
	//this.setPriority(10);
}

public void keyPressed(KeyEvent e){
	switch (e.getKeyCode()){
		case KeyEvent.VK_ESCAPE:
			System.exit(0);
	}
}

public void keyReleased(KeyEvent e){}

public void keyTyped(KeyEvent e){}

}[/code]

[code]class TesteThread extends Thread{

public static void main(String[] args){
	TestThread1 testeThread1=new TestThread1();
	TestThread2 testeThread2=new TestThread2();
	
	testeThread2.start();
	testeThread1.start();
}

}[/code]

Que sincronização? Uma das threads cria um Frame, cria um listener e morre.

A outra cria um Robot, que move o mouse de maneira super rápida, e depois disso morre também.

Não há variáveis compartilhadas entre as threads.

Sua falha está no conceito do que é uma thread. Thread não é um objeto, nem uma classe que estende thread. Thread é a linha de execução do programa, criada quando se chama o start.

No caso, a linha de execução da thread que inicia em TestThread2 só roda isso aqui:

public void run(){ frame.addKeyListener(this); }

Ou seja, a thread simplesmente pega um frame já criado na main thread, adiciona nele um listener e, ao terminar o método run, morre.

O keyPressed não é processado nessa thread, e sim na thread do Swing, que é quem dispara eventos.

Neste caso, o que eu posso fazer para que, ao apertar uma tecla, pare o Robot, e termine a execução do programa? :frowning: