Relogio digital, n sei qual a burrada

2 respostas
S

Serio gente, n fasso ideia.

Minha classe que da a hora

public class Hora implements Runnable {

	Apresentacao a = null;
	
	public Hora(Apresentacao a){
		this.a = a;
		Thread t = new Thread();
		t.start();
	}
	
	@Override
	public void run() {
		while(true){
			Date d = new Date();
			this.a.setHora("Funciona");
			try{
				Thread.sleep(10000);
			}catch(Exception e){
				System.err.println("Erro na parada do tempo");
			}
		}
		
	}
}

na minha classe de apresentacao fiz o metodo

//meus metodos public void setHora(String hora){ horaDigital.setText(hora); }

e tenho tbm no construtor

public Apresentacao() { super(); Hora h = new Hora(this); initialize(); }

Mas quando eu executo ele, a tela trava, e olha q to usando linux com fedora eclipse 3.3.1, travar aki e coisa rara.
Alguem pode me dizer oque esta errado, n consigo entender.

2 Respostas

renzonuccitelli

Acho que vc confundiu as bolas amigo. No seu construtor vc cria uma Thread que não faz nada. Pq em vez de estender de Runnable, vc nao estendeu direto de Thread?

Aí no seu construtor, vc colocaria:

super(); this.a=a; this.start();

Pelo que entendi, acho que esse código estaria condizendo com o que vc quer.

Se vc usar a Runnable, vc teria que passar sua classe no construtor de uma Thread para que ela executasse em outra linha de execução…

renzonuccitelli

Vai uma idéia geral:

public class Relogio extends JFrame {
	private JLabel label;
	public Relogio(){
		super("Relógio");
		label=new JLabel();
		JPanel panel=new JPanel();
		panel.setLayout(new BorderLayout());
		panel.add(label, BorderLayout.CENTER);
		this.setContentPane(panel);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setSize(200, 200);
		new RelogioThread(label).start();
		
	}
	
	static public void main(String[] a){
		new Relogio();
	}

}
public class RelogioThread extends Thread {
	private JLabel label;
	public RelogioThread(JLabel label){
		this.label=label;
	}
	
	public void run(){
		int segundos=0;
		while(true){
			
			try {
				label.setText("segundos: "+segundos);
				Thread.sleep(1000);
				++segundos;
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}

}
Criado 21 de novembro de 2008
Ultima resposta 21 de nov. de 2008
Respostas 2
Participantes 2