Aperfeiçoar código de um relogio  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Murl
JavaChild

Membro desde: 03/04/2009 10:34:42
Mensagens: 116
Localização: DF
Offline

Fiz um relogio bem simples só num JLabel mesmo... Estou estudando Threads e queria dicas!



O código está funcionando, só queria dicas de aperfeiçoamento! Vlws!

edit: na literatura que estou lendo diz que uma thread depois que sai de um Thread.sleep(long m) não necessariamente VAI ser movida para o estado de execução... Entao uma duvida também é: como fazer que com CERTEZA a thread desse relogio, a qual dei sleep, volte para o estado de execução ao inves de outras thread entrarem no caminho!?

This message was edited 1 time. Last update was at 30/06/2009 11:38:20


OMW to SCWCD;

SCJP 6
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Murl wrote:como fazer que com CERTEZA a thread desse relogio, a qual dei sleep, volte para o estado de execução ao inves de outras thread entrarem no caminho!?


No way. O correto, no seu caso, é você pegar o horário atual sempre, já que você nunca vai saber exatamente quanto tempo seu Thread.sleep gastou EXATAMENTE.

Se você pedir Thread.sleep (1000), por exemplo, pode ser que o Java espere 1 segundo e 15 milissegundos, por exemplo. Portanto, do jeito que você fez, o seu relógio vai acabar ficando atrasado gradativamente. É melhor atualizar seu relógio de 500 em 500 ms, por exemplo, e sempre pegar o horário atual.

E nunca use um "while true" para modificar um JLabel, ou seja lá o que for.
No seu caso em particular, use um javax.swing.Timer ou um java.util.Timer.

This message was edited 2 times. Last update was at 30/06/2009 12:02:23



[WWW]
Murl
JavaChild

Membro desde: 03/04/2009 10:34:42
Mensagens: 116
Localização: DF
Offline

Eu pensei em criar um objeto date e formatar dentro do jlabel, mas ai a thread criaria MTO objeto eu acho né?

Vou dar uma olhada nessas classes, vlw!

Mas gostaria de saber mais de:

thingol wrote:
E nunca use um "while true" para modificar um JLabel, ou seja lá o que for.


Por que?

OMW to SCWCD;

SCJP 6
filipenf
JavaBaby

Membro desde: 27/05/2009 12:47:07
Mensagens: 98
Offline

Concordo com o thingol, se vc usar Timer/TimerTask seu código fica mais limpo e fácil de entender, além de não ter que usar esse while true aí...

Além disso, utilize a classe SimpleDateFormat para formatar a hora para apresentar no JLabel.

Você está bêbado quando começa a sentir solidariedade e não consegue pronunciar essa palavra.

Filipe N. Felisbino
SCJP - SCWCD - LPIC 1
fnf01.blogspot.com - twitter.com/filipenf
[WWW] [Yahoo!]
Murl
JavaChild

Membro desde: 03/04/2009 10:34:42
Mensagens: 116
Localização: DF
Offline

Fiz assim... Legal esssa classe =P


Fazendo isso pode sobrecarregar a JVM? Criando muitos objetos date? Apesar de que eles podem ser GCed, isso não pode criar um uso de memoria em excesso?

Nunca usei o SimpleDateFormat, ele é muito melhor que o DateFormat? Eu acustumei a usar o DateFormat...

Vlws!

This message was edited 1 time. Last update was at 30/06/2009 12:29:46


OMW to SCWCD;

SCJP 6
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Um exemplo bobo de relógio codificado no NetBeans.

[WWW]
Murl
JavaChild

Membro desde: 03/04/2009 10:34:42
Mensagens: 116
Localização: DF
Offline

Vlw thingol... Consegui usar o javax.swing.Timer aqui

Gostaria de saber mais sobre o while(true) =P

OMW to SCWCD;

SCJP 6
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Mestres,
e se o timer parar por alguma motivo? (essas "coisas" do java são acostumadas a fazer isso)..
uma thread não seria melhor solução não?

This message was edited 1 time. Last update was at 30/06/2009 13:35:59

[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

De fato, um Timer é implementado como uma thread, mas ela não é muito robusta. Se o método actionPerformed lançar alguma exceção, então o "timer para". Você pode modificar o código que escrevi para



para evitar alguns problemas.
[WWW]
Matheus Leandro Ferreira
JavaChild
[Avatar]

Membro desde: 23/12/2008 07:01:02
Mensagens: 135
Offline

Poisé.. geralmente não é uma boa o catch não fazer nada. Porém ao se tratar de timer/task é melhor assim!

[MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team