Problema com thread

6 respostas
rodolfogs8

Galera olha o que ta acontecendo quando o codigo fica assim com vou colocar roda direitinho:

package tela;

import java.awt.EventQueue;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Class1 extends JFrame {
    JLabel jlabel = new JLabel();
    JButton jButton1 = new JButton();
    int cont = 0;


    public Class1() {

        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.getContentPane().setLayout(null);
        jlabel.setBounds(new Rectangle(50, 15, 135, 25));
        jButton1.setText("jButton1");
        jButton1.setBounds(new Rectangle(80, 50, 75, 30));
        jButton1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        jButton1_actionPerformed(e);
                    }
                });

        this.getContentPane().add(jButton1, null);
        this.getContentPane().add(jlabel, null);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);
        setVisible(true);
    }

    public void ii() {

        try {

            Thread t = new Thread();

            while (true) {
                EventQueue.invokeLater(new Runnable() {
                            public void run() {
                                // Só podemos chamar setHora diretamente dessa
                                // forma, pois esse Runnable é uma InnerClass não
                                // estática.
                                jlabel.setText("" + cont);
                            }
                        });

                cont++;

                System.out.println(cont);

                try {
                    t.sleep(1000);
                } catch (InterruptedException u) {
                    System.out.println(u);
                }
            }


        } catch (Exception r) {
            System.out.println(r);
        }
    }

    private void jButton1_actionPerformed(ActionEvent e) {

    }

    public static void main(String[] args) {
        Class1 g = new Class1();
        g.ii();

    }
}

Mas quando eu camo o metodo ii.(); dentro do metodo jButton1_actionPerformed(ActionEvent e) da pau trava a minha tela pq sera que eu nao consigo fazer uma thread roda no click do meu botao?

Ta dificil pessoal preciso de ajuda…obrigado

6 Respostas

ViniGodoy

Para criar uma thread, você tem que fazer assim:

Thread t = new Thread(new Runnable() { public void run () { //Aqui vai o método que será disparado em outro thread } }).start(); //O start aqui inicia a thread.

Só criar um new Thread, do jeito que você fez, não dispará o código em outra thread.

No outro tópico que você criou eu te passei este tópico com 3 exemplos, alguns deles aqui na segunda página. Dois deles usando as classes de timer. Leia com mais atenção e veja como funciona.

PS: Você poderia ter dado prosseguimento ao assunto no tópico original. Eu já teria visto a sua dúvida a muito mais tempo.

rodolfogs8

Cara estou tentando montar uma tela com diversos paineis e fazer os objetos destes paineis se comunicarem constantemente, o que ta pegando e que nao consigo setar um campo em um determinado painel atraves do clique do botao de outro painel…ta um tanto confuso isso cara…nao sei por onde comecarr…

ViniGodoy

Já pensou em trabalhar com Listeners? Isso me parece ser um caso típico do padrão Observer.

Seria uma boa ter uma classe Mediator entre os painéis também.

Assim, você clica num painel, o Mediator escuta e repassa a informação para os outros painéis interessados (que forem relevantes).

rodolfogs8

Entao eu estou tentando vi alguma coisa de listeners mas sera que com eles eu consigo de um painel setar um outro painel???

ViniGodoy

Claro.

Desde que um Panel referencie o outro.

rodolfogs8

Cara eu so novatao to apanhando muito…o que eu fiz foi o seguinte

no clique do botao do painel que esta na classe2 eu setei o campo na classe1 entendeu?

assim

Classe1{

Ela apenas contem um painel que contem um JTextField
}

Classe2{

BtnINSERIR.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

BtnINSERIR_actionPerformed(e);

} catch (SQLException f) {

// TODO

}

}

});

private void BtnINSERIR_actionPerformed(ActionEvent e) throws SQLException {

PainelDaClasse1 p = new PainelDaClasse1 ();

p.CampoDaClasse1.setText(Teste);

}

Cara sera que tem algo errado, pois ele nao seta de jeito nenhum…

Criado 15 de agosto de 2007
Ultima resposta 17 de ago. de 2007
Respostas 6
Participantes 2