Na sua classe que implementa Runnable deve ter um método run(). Coloque nesse método o código que deverá ser chamado em uma nova thread. Na sequência, crie uma Thread e chame start nela. Exemplo:
classClasseRunnableimplementsRunnable{publicvoidrun(){//Código assíncrono aqui.}}classTeste{publicstaticvoidmain(String[]args){ClasseRunnablec=newClasseRunnable();Threadt=newThread(c);t.start();//Aqui começa a execução assíncrono do código informado no método run}}
R
rlanhellas
Se eu tentar realizar o código abaixo me diga se esta certo:
classClasseRunnableimplementsRunnable{publicvoidrun(){//Código assíncrono aqui. }publicvoidMostrarMsg(JLabellabel,Stringtexto){label.setText(texto);}}classTeste{publicstaticvoidmain(String[]args){ClasseRunnablec=newClasseRunnable();Threadt=newThread(c);t.start();//Aqui começa a execução assíncrono do código informado no método run c.MostrarMsg(lblNeu1,"ola mundo");}}
gmmascarin
Está errado. No exemplo têm 2 threads. A primeira é aquela do main. Dentro dela você está criando uma nova thread que é executada quando chama o start(). Funciona como se você estive executando um outro programa.
Coloque seu comando dentro do método run e teste.
R
rlanhellas
Mas como vou passar o label que quero atualizar no Método Run ?
ViniGodoy
O Runnable é uma classe. Então, crie um atributo dentro da classe, e passe o label no construtor:
public class Exemplo implements Runnable {
private JLabel label;
public Exemplo(JLabel label) {
this.label = label;
}
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
label.setText("Counting: + i");
}
});
Thread.sleep(1000);
}
}
}
Uso:
Exemplo exemplo = new Exemplo(umLabelQualquer);
Thread t = new Thread(exemplo);
t.start();
jcranky
Só um comentário, no código do Godoy, preste atenção para o fato de que ele usou
EventQueue.invokeLater(newRunnable(){...});
Isso é bastante importante. Você não deve atualizar componentes da tela diretamente nas threads da aplicação.