KeyListener em outro aplicativo

4 respostas
J

Boa tarde pessoal estou precisando muito da ajuda de vcs, estou desenvolvendo um aplicativo usando classe robot para puxar e arrastar coisas de qualquer lugar da tela.

O meu problema é para fazer ele parar, pois eu adicionei um keylistener e não funciona, ele nao para de arrastar coisas quando aperto uma tecla.
Eu gostaria de saber como posso fazer para que o keylistener ou qualquer outra coisa da API identificasse quando foi pressionado alguma tecla, em qualquer lugar.

Por exemplo: eu inicio o robot para arrastar ele arrasta em qualquer janela do computador, eu estando em qualquer area pressiono alguma tecla, o robot para de arrastar. É como ele ficasse em execução arrastando em modo de espera, e eu apertando qualquer tecla ele para.
public testeTeclado() {
		try {
			robo = new Robo();
		} catch (AWTException e) {
		}
		new KeyListener() {

			@Override
			public void keyTyped(KeyEvent arg0) {
				setFlag(false);
			}

			@Override
			public void keyReleased(KeyEvent arg0) {

			}

			@Override
			public void keyPressed(KeyEvent arg0) {
				setFlag(false);
			}
		};
	}

Obrigado.

4 Respostas

lucasportela

Pesquise sobre Threads.

Entenda, você tem uma tarefa e tem um listener para escutar está tarefa… ao executar a tarefa, seu aplicativo escutou que foi executado, mas só vai realizar seu comando programado no listener depois da tarefa terminar. Ai entra o conceito de Threads, você quer interromper um thread no momento em que apertar um botão, você precisa de uma thread para ouvir o botao e a outra thread para realizar a tarefa, uma thread irá interromper a outra.

J

Eu não conheço muito sobre threads dei uma pesquisada aqui, e fiz o seguinte:

Thread t = new Thread();
               public testeTeclado() {
		try {
			robo = new Robo();
		} catch (AWTException e) {
		}
		new Thread () {
			
			public void keyTyped(KeyEvent arg0) {
				t.isInterrupted();
			}

			public void keyReleased(KeyEvent arg0) {

			}

			public void keyPressed(KeyEvent arg0) {
				t.isInterrupted();
			}
		};
	}
	public void executar() throws AWTException {
		this.pedirInformacoes();

		while (!t.isInterrupted()) {

			robo.MouseMove(xSqmBackpack, ySqmBackpack, xSqmLoot, ySqmLoot);
			robo.MousePressDireito();
			robo.delay(2);

		}
	}

Não tive resultados, axo que to fazendo algo errado, pois pra ler o keypress preciso criar uma nova thread e o t.isInterrupted(); nao funciona.
Se puder me ajudar, fico grato.

lucasportela

Aqui ele dá vários exemplos, dentre um deles tem o que você precisa, o bom mesmo é ler tudo

J

Obrigado por estar me ajudando lucasportela.
Eu li todo o conteudo do link que vc mandou, tentei fazer aqui de um jeito, mas nao da, eu aperto a tecla ele nao para a execução.

public class PararTask extends Thread{

        public PararTask() throws AWTException
	{
		t = new Thread();
		robo = new Robo();
	}
	public void run(){
		this.pedirInformacoes();

		while (t.isInterrupted() == false) {

			robo.MouseMove(xSqmBackpack, ySqmBackpack, xSqmLoot, ySqmLoot);
			robo.MousePressDireito();
			robo.delay(2);

		}
	}
public class testeTeclado extends PararTask {
	
	public testeTeclado() throws AWTException
	{
		super();
	}

	public void testeTeclado() {
	
		new KeyListener() {
			
		
			@Override
			public void keyTyped(KeyEvent e) {
				t.interrupt();
				
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				
				
			}
			
			
			@Override
			public void keyPressed(KeyEvent e) {
				t.interrupt();
				
			}
		}; 
		
	}

Os nomes das classes estão assim pq estou fazendo os testes.

Alguem tem alguma ideia, de como posso fazer?

Criado 19 de setembro de 2011
Ultima resposta 19 de set. de 2011
Respostas 4
Participantes 2