Pessoal,
Estou com um pequeno impasse por aqui e vim pedir a ajuda de vocês.
Estou adptando um pequeno exemplo da utilização de Threads em java e o código ja está em andamento porém não consigo utilizar efetivamente as threads, segue o código para que possam entender.
import javax.swing.*;
import java.awt.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class ExemploThread extends JFrame
{
private JLabel lblHora;
private String titulo;
private JFrame janela;
JFrame getJanela()
{
return janela;
}
String getTitulo()
{
return titulo;
}
// Formatador da hora
private static final DateFormat FORMATO = new SimpleDateFormat("HH:mm:ss");
public ExemploThread()
{
// Construímos nosso frame
super("Threads em JAVA.");
setLayout(new FlowLayout());
JLabel lblThread = new JLabel("Teste");
getContentPane().add(lblThread);
getContentPane().add(getLblHora());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 75);
setVisible(true);
// Iniciamos um timer para atualizar o relógio
Timer t = new Timer("ClockTimer", true);
//Pedimos para ele disparar a cada 1 segundo.
t.schedule(new ClockTask(), 0, 1000);
}
public ExemploThread(JFrame janela)
{
this.janela = janela;
this.titulo = janela.getTitle();
}
private JLabel getLblHora()
{
if (lblHora == null)
{
lblHora = new JLabel();
}
return lblHora;
}
/**
* Método para atualizar a hora no formulário. Não é thread-safe, portanto,
* se o utilizado fora da thread da AWT, deve-se utilizar um dos comandos da
* EventQueue (invokeLater ou invokeAndWait).
*/
public void setHora(Date date)
{
getLblHora().setText(FORMATO.format(date));
}
/**
* Runnable que contém o código que atuará na nossa thread. Basicamente, ele
* chama o método setHora de segundo em segundo, passando a data atual.
*/
private class ClockTask extends TimerTask
{
@Override
public void run()
{
// Aqui chamamos o setHora através da EventQueue da AWT.
// Conforme dito, isso garante Thread safety para o Swing.
EventQueue.invokeLater(new Runnable()
{
public void run()
{
// Só podemos chamar setHora diretamente dessa
// forma, pois esse Runnable é uma InnerClass não
// estática.
setHora(new Date());
}
});
}
}
public static void main(String args[])
{
ExemploThread t1 = new ExemploThread();
t1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MinhaThread extends Thread
{
ExemploThread t1 = new ExemploThread();
private JFrame janela = t1.getJanela();;
private String titulo = t1.getTitle();
public void run()
{
try
{
while(true)
{
if(janela.getTitle().equals(""))
janela.setTitle(titulo);
else
janela.setTitle("");
Thread.sleep(300);
}
}
catch(InterruptedException ex)
{
// precisa fazer nada aqui
}
}
}
A intenção é utilizar threads para a janela (título) ficar piscando enquanto o relógio segue atualizando, consegui alguns exemplos parecidos no entanto não soube implementar.
Alguém pode me informar o que devo incluir ou modificar?
Grato,
Kleiton