Dúvida em aplicação swing com "tarefa de fundo"

5 respostas
D

Boas eu criei uma aplicação swing que realiza diversas tarefas a partir dos correspondentes botões. Para criar esta aplicação utilizei um metodo exemplificado já n sei onde e que dizia usar isto:

public static void main (String[] args)
    {
        javax.swing.SwingUtilities.invokeLater (new Runnable ()
        {
            public void run ()
            {
                createAndShowGUI();
            }
        });
    }

Pronto, a partir da funcao createAndShowGUI () criei um Frame com os seus botões e cada um deles associados a um ActionListener.

O programa funciona optimamente, agora o meu problema é que eu queria que o programa estivesse também a executar sempre uma tarefa de fundo, como se por exemplo eu estivesse sempre a carregar num mesmo botão e ele estivesse sempre a realizar essa tarefa. Onde é que eu poria essa função? Isto por outras palavras, onde é que fica a linha de acção do programa quando não está a executar nenhuma das tarefas dos botões, quando esta só a mostrar a tela à espera que eu carregue num dos botões?

Espero que tenham percebido esta duvida de principiante…

5 Respostas

lordtiago

Você quer algo um tanto avançado, recomendo que leia a matéria sobre Threads na seção de Tutoriais/Artigos do site.
Creio que Threads com certeza, é a resolução para isso. Só estudar um pouco irmãozinho
Qualquer coisa posta aí, sobre alguma dúvida relativa a implementação.
Mas leia e pesquise sobre Threads em Java antes!
Forte Abraço
Ass. lordtiago

ViniGodoy

Toda vez que você inicia um JFrame, a AWT cria uma fila de mensagens e começa a escutar por eventos do Windows (e dela própria). O código fica parado nessa fila, que verifica que botões foram pressionados, redesenha a tela, e faz as ações necessárias para manter o ambiente gráfico. Você não precisa manipular essa fila diretamente, salvo raras exceções (como ao usar o método invokeLater).

Para realizar uma ação no botão, você deve adicionar um listener nesse botão, por exemplo:

seuBotao.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JOptionPane.showMessageDialog(null, "Olá mundo!"); } }

D

eu isso de associar uma accao a determinado botao sei fazer. o que eu queria era saber como e onde posso adicionar uma função/acção que esteja sempre a ser executada, nos momentos em que o programa espera que eu carrega nos botoes.

ViniGodoy

Então dá uma olhada nesse exemplo:
http://www.guj.com.br/posts/list/52964.java#279083

E nos dois da página seguinte.

D

obrigado. com esse exemplo ja consegui solucionar o meu problema

Criado 17 de fevereiro de 2008
Ultima resposta 19 de fev. de 2008
Respostas 5
Participantes 3