Ja li por ai que o objeto Vector é synchronized por natureza !
Mas estou tendo alguns problemas , acredito que relacionado a falha desse principio ! (se é que isso é possível)
Eu estou usando uma jList com o conteudo de um Vector
e no processamento dos dados uma thread move os elementos
da jList da esquerda pra jList da direita .
com esse método aqui :
public void listChange(int index)
{
data2.add(data.remove(index));
rebuildjList1();
rebuildjList2();
}
public void rebuildjList1()
{
jList1.setListData(data);
}
public void rebuildjList2()
{
jList2.setListData(data2);
}
ja até tentei colocar esse método como synchronized mas não resolveu !
Apesar de funcionalmente o programa não apresentar falhas hora ou otra
no console é disparado algumas exceções , variando apenas os numeros da indicação
com o index de onde ocorreu a ArrayIndexOutOfBoundsException !
Abaixo segue um exemplo , como eu disse a mensagem é sempre a mesma muda as vezes é os indices que
indicam o ponto da excecao no vetor.
<blockquote>
[color=darkred]Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 5 >= 4[/color]
[color=blue] at java.util.Vector.elementAt(Vector.java:432)
at javax.swing.JList$5.getElementAt(JList.java:1250)
at javax.swing.plaf.basic.BasicListUI.paintCell(BasicListUI.java:185)
at javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:290)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at javax.swing.JComponent.paintComponent(JComponent.java:742)
at javax.swing.JComponent.paint(JComponent.java:1005)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4963)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4916)
at javax.swing.JComponent._paintImmediately(JComponent.java:4859)
at javax.swing.JComponent.paintImmediately(JComponent.java:4666)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:451)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:114)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)[/color]</blockquote>
Eu suponho que que esteja havendo algum conflito entre a thread que está varrendo as jList e Thread do awt que dispara os eventos , mas eu nao sei como eu posso dar um jeito nisso !
