Pergunta

Eu tenho um JWindow e um JFrame, tanto que eu fiz runnable e ambos implementar um mouse ouvinte.Eu tenho um monte de testes para fazer um projeto de mina e simplificar a ti eu gostaria de ser capaz de automatizar a maioria, então eu tenho de começar o meu próprio mouse recorder e replayer (usa Java Robô de Classe).

Meio que como uma simplificado o AutoHotKey ou AutoIt coisa...mas ele vai ficar na minha máquina o Ubuntu, bem como o meu Windows uma!!!

O JWindow eu tenho feito é translúcido e cobre a tela inteira, quando você clicar sobre ele desaparece e repete o clique para o objeto para trás e, em seguida, reaparece.Este é o processo de gravação.Quando o direito de Usuário clica está definido para não visíveis e as ações gravadas sejam repetidos.

Durante a reprodução, quero a opção de ser capaz de sair de todo o aplicativo e então, pensei que a melhor maneira de fazer isso seria fazer o JFrame e o JWindow Runnable.

O JFrame é apenas a de oferecer uma opção de fechamento do aplicativo.

Então, na minha classe Principal de eu ter

public static void Main(String[] args){
    recorder = new Recorder();
    gui = new GUI();
    Thread tr = new Thread(recorder);
    Thread tg = new Thread(gui);
    tr.setName("Recorder");
    tg.setName("GUI");
    tr.start();
    tg.start();
}

Meu entendimento é o Gravador e o GUI são executáveis e objetos que são feitas em segmentos de via que o Thread de novo comando.Quando eu uso .start() eu estou começando a execução do thread e a partir de agora o sistema decide que o thread está em execução em um determinado momento.

Para o Gravador e o GUI classes.

public class Recorder
        implements Runnable, MouseListener {

//Constructor and other code

    public void mouseClicked(MouseEvent e) {

        if (e.getButton() == MouseEvent.BUTTON1) {
             //Record events
        }else{
             //Replay events
        }
        System.exit(0);
    }

    public void run() {
        System.out.println("Recorder");
    }
}

public class GUI 
    implements Runnable, MouseListener {

//Constructor, simply constructs JFrame and sets mouselistener to it

   public void mouseClicked(MouseEvent e) {
       System.exit(0);
   }

   public void run() {
        System.out.println("GUI");
   }

}

Meu aplicativo imprime Gravador e, em seguida, GUI Me permite gravar a minha eventos em seguida, clique direito sobre o JWindow para reproduzi-los...

mas então, quando eu clicar no JFrame botão de fechar ou até mesmo no quadro, porque do mouse ouvinte não vai sair até que todas as ações foram integralmente reproduzidos?

Uma coisa que eu fiz maravilha é que sempre que eu colocar em execução é o que é o que mantém o thread em execução?Assim, quando o Sistema.de fora.println("");é executada, a thread morrer?Então, eu tentei um loop while em torno deles e o meu aplicativo imprime com êxito

GUI GUI GUI GRAVADOR GRAVADOR GUI GRAVADOR etc etc

Assim eu posso ver o que eles threads são executados simultaneamente...só que todas as outras ações fora do executado não parecem ter executado...Como posso incluir meu mouse ouvinte, etc dentro de threads de execução?

Foi útil?

Solução

Você está confuso, Threads com Objects.Quando você tem um Object que é um Runnable que só dá um ponto de partida para um Segmento.No entanto, isso não significa que quando outro thread (neste caso a thread de Eventos de que trata o MouseListener) chama um método em sua Runnable que é executado pela thread que está executando o Runnable.Quando um método é chamado, ele nunca muda para outra thread.Se você quer isso, você precisa de um mecanismo.Por exemplo, uma fila que a MouseListener pode postar as tarefas e, em seu Runnable.run() você, em seguida, continue a olhar para uma nova tarefa.

Outras dicas

Quando o balanço é inicializado, ele começa a sua própria Evento segmento de Expedição.Todos os seus ouvintes métodos executa dentro deste segmento.Não importa se ou não seu objeto de escuta implementa runnable.

Veja este tutorial para compreender os conceitos básicos de multi-threading, no contexto do Balanço. http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html

A verdadeira resposta para a sua pergunta é nesta parte do tutorial:

http://java.sun.com/docs/books/tutorial/uiswing/concurrency/cancel.html

Mas eu sugiro que você vá através de todo o tutorial.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top