Olá a todos !!!
Há algum tempo tenho convivido com a excessao mencionada abaixo, ela nao causa nenhum funcionamento anormal no sistema, (pelo menos q eu tenha percebido), mas ja ta me encomodando…
Vou explicar o que eu tenho:
eu criei um “componente” pra usar como rodapé das telas, esse componente é na verdade um JPanel, com 3 JLabels e um JProgressBar, nessa classe que extends JPanel existe dentre outros, um metodo que uso pra trabalhar com o progressbar (setar a propriedade indeterminate)
public void setIndeterminateProgressBar(boolean indeterminate) {
jProgressBar1.setIndeterminate(indeterminate);
}
entao eu declaro um objeto na tela e quando vou fazer alguma operação meio demorada, eu faço ao inicio e término da operação:
objeto.setIndeterminateProgressBar(true);
objeto.setIndeterminateProgressBar(false);
eu chamo esses métodos a partir de Threads, pra que a tela possa ser atualizada e o progresso do JProgressBar exibido para o usuario, e acredito que o problema esteja ai…
a excessao é a seguinte:
<blockquote>Exception occurred during event dispatching:
java.lang.NullPointerException
at javax.swing.plaf.basic.BasicProgressBarUI.updateSizes(BasicProgressBarUI.java:470)
at javax.swing.plaf.basic.BasicProgressBarUI.getBox(BasicProgressBarUI.java:427)
at javax.swing.plaf.basic.BasicProgressBarUI.paintIndeterminate(BasicProgressBarUI.java:582)
at javax.swing.plaf.metal.MetalProgressBarUI.paintIndeterminate(MetalProgressBarUI.java:126)
at javax.swing.plaf.basic.BasicProgressBarUI.paint(BasicProgressBarUI.java:392)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:763)
at javax.swing.JComponent.paint(JComponent.java:1027)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
at javax.swing.RepaintManager.paint(RepaintManager.java:1198 )
at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:783)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128 )
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:284)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178 )
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:284)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)</blockquote>
esses dias eu tava pesquisando a respeito dessa excessao, e encontrei tres links, mas nao consegui entender, entao venho pedir a ajuda de vcs…
1 - http://bannister.us/weblog/2008/02/
2 - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4914265
3 - http://forums.sun.com/thread.jspa?threadID=5339057&tstart=0
no terceiro link e quarto post do tópico, o cara explica que o que está acontecendo é que nao é recebido a seqüência de eventos que permite que o código execute mesmo quando componentInnards é nulo, e que componentInnards só é definida para nulo em um lugar - no método cleanUpIndeterminateValues(). Este método é chamado pela propriedade ouvinte quando a propriedade indeterminate da barra de progresso é definida para false. Então você não deve ter uma situação em que o valor é nulo e a barra de progresso é indeterminada(indeterminate = true eu acho, rsrsrs).
E que o que pode estar errado é:
- Você está alterando a propriedade indeterminate da barra de progresso fora do awt event thread.
- você sobrecarregada JProgressBar.isIndeterminate() em uma subclasse de devolver valores inconsistentes ou não notificar a propriedade ouvintes
Enfim, eu nao entendi muito bem isso tudo…
O que vem a ser componentInnards ???
Como assim sobrecarrega isIndeterminate() ???
Desculpe minha tradução, eu sei q ela nao é das melhores…
vlw t+