| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 11:18:43
|
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:00:57
|
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
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:11:21
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:12:54
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:28:39
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:31:25
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Um exemplo bobo de relógio codificado no NetBeans.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:37:01
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 13:35:30
|
Matheus Leandro Ferreira
JavaChild
![[Avatar]](/images/avatar/8f63ef371d249dc31f244c24a0abb437.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 13:38:31
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 13:43:31
|
Matheus Leandro Ferreira
JavaChild
![[Avatar]](/images/avatar/8f63ef371d249dc31f244c24a0abb437.jpg)
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!
|
|
|
 |
|
|