Newsgroup: it.comp.java
Titolo: Metodi chiamati da dentro dei thread

Ho messo per prova tredici elementi in una tabela
Poi con un metodo scorro la tabella e stampo gli elementi
Se chiamo questo metodo in maniera "Tradizionale"
posso scorrerli quanto e funziona perfettamente
Quando chiamo questo mettodo da dentro
un processo Thread non funziona più ...
====================
QUESTO SOTTO E IL LOG
====================
compile-single:
run-single:
Indice 0 Informational
Indice 1 Informational
Indice 2 Informational
Indice 3 Informational
Indice 4 Informational
Indice 5 Informational
Indice 6 Informational
Indice 7 Informational
Indice 8 Informational
Indice 9 Informational
Indice 10 Informational
Indice 11 Informational
Indice 12 Informational
Indice 0 Informational
Indice 1 Informational
Indice 2 Informational
Indice 3 Informational
Indice 4 Informational
Indice 5 Informational
Indice 6 Informational
Indice 7 Informational
Indice 8 Informational
Indice 9 Informational
Indice 10 Informational
Indice 11 Informational
Indice 12 Informational
=======================================
POSSO FARLO MILLE VOLTE E FUNZIONA
ORA LO CHIAMO ANCHE DA DENTRO IL THREAD
E NON FUNZIONA PIU BENE
IL THREAD MI SERVE PER TENER AGGIORNATA
LA TABELLA CON DATI ESTERNI CHE VARIANO
IN CONTINUAZIONE
=======================================
PARTITO IL THREAD :
Indice 0 Informational
Indice 1 Informational
Indice 2 Informational
Indice 3 Informational
Indice 4 Informational
Indice 5 Informational
Indice 6 Informational
Indice 7 Informational
Indice 8 Informational
Indice 9 Informational
Indice 10 Informational
Indice 11 Informational
Indice 12 Informational
Exception in thread "AWT-EventQueue-0"
java.util.NoSuchElementException
        at
com.ibm.as400.access.QueuedMessageEnumeration.nextElement(QueuedMessageEnumeration.java:
59)
        at
com.ibm.as400.vaccess.VMessageQueue.loadMore(VMessageQueue.java:780)
        at
com.ibm.as400.vaccess.VMessageQueue.getDetailsChildAt(VMessageQueue.java:
432)
        at
com.ibm.as400.vaccess.AS400DetailsModel.getValueAt(AS400DetailsModel.java:
350)
        at javax.swing.JTable.getValueAt(JTable.java:2639)
        at javax.swing.JTable.prepareRenderer(JTable.java:5653)
        at
javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
        at
javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
        at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:
1770)
        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:1128)
        at javax.swing.JComponent._paintImmediately(JComponent.java:
5070)
        at javax.swing.JComponent.paintImmediately(JComponent.java:
4880)
        at
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
        at
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
        at
javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:
659)
        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:
273)
        at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:
183)
        at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:
173)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:
121)
Exception in thread "AWT-EventQueue-0"
java.util.NoSuchElementException
        at
com.ibm.as400.access.QueuedMessageEnumeration.nextElement(QueuedMessageEnumeration.java:
59)
        at
com.ibm.as400.vaccess.VMessageQueue.loadMore(VMessageQueue.java:780)
        at
com.ibm.as400.vaccess.VMessageQueue.getDetailsChildAt(VMessageQueue.java:
432)
        at
com.ibm.as400.vaccess.AS400DetailsModel.getValueAt(AS400DetailsModel.java:
350)
        at javax.swing.JTable.getValueAt(JTable.java:2639)
        at javax.swing.JTable.prepareRenderer(JTable.java:5653)
        at
javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
        at
javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
        at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:
1770)
        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:1128)
        at javax.swing.JComponent._paintImmediately(JComponent.java:
5070)
        at javax.swing.JComponent.paintImmediately(JComponent.java:
4880)
        at
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
        at
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
        at
javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:
659)
        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:
273)
        at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:
183)
        at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:
173)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:
121)
Indice 0 Informational
Indice 1 Informational
Indice 2 Informational
Indice 3 Informational
Indice 4 Informational
Indice 5 Informational
Indice 6 Informational
Indice 7 Informational
Indice 8 Informational
Indice 9 Informational
Indice 10 Informational
Indice 11 Informational
Indice 12 Informational
Exception in thread "AWT-EventQueue-0"
java.util.NoSuchElementException
        at
com.ibm.as400.access.QueuedMessageEnumeration.nextElement(QueuedMessageEnumeration.java:
59)
        at
com.ibm.as400.vaccess.VMessageQueue.loadMore(VMessageQueue.java:780)
        at
com.ibm.as400.vaccess.VMessageQueue.getDetailsChildAt(VMessageQueue.java:
432)
        at
com.ibm.as400.vaccess.AS400DetailsModel.getValueAt(AS400DetailsModel.java:
350)
        at javax.swing.JTable.getValueAt(JTable.java:2639)
        at javax.swing.JTable.prepareRenderer(JTable.java:5653)
        at
javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
        at
javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
        at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:
1770)
        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:1128)
        at javax.swing.JComponent._paintImmediately(JComponent.java:
5070)
        at javax.swing.JComponent.paintImmediately(JComponent.java:
4880)
        at
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
        at
javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
        at
javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:
659)
        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:
273)
        at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:
183)
        at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:
173)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:
121)
BUILD STOPPED (total time: 20 seconds)
==================================
Questo e il metodo che da problemi ......
==================================
public void caricaTabella()  {
            explorerPane.load ();
            myData = explorerPane.getDetailsModel();
            numMessaggi = myData.getRowCount();
           for (int i = 0; i <numMessaggi; ++i)
          {
            System.out.println("Indice " + i + " " +
myData.getValueAt(i, 3));
                      }
            }
=====================================================
Facendo vari tentativi con questo metodo ho ottenuto questi
risultato ....
Cosi funziona sempre sia dentro che fuori da thread
=====================================================
public void caricaTabella()  {
            explorerPane.load ();
            myData = explorerPane.getDetailsModel();
            numMessaggi = myData.getRowCount();
            }
=====================================================
Facendo vari tentativi con questo metodo ho ottenuto questi
risultato ....
Cosi abche funziona sempre sia dentro che fuori da thread
Caricando la tabella fuori dal metodo
=====================================================
public void caricaTabella()  {
            myData = explorerPane.getDetailsModel();
            numMessaggi = myData.getRowCount();
           for (int i = 0; i <numMessaggi; ++i)
          {
            System.out.println("Indice " + i + " " +
myData.getValueAt(i, 3));
                      }
            }
======================================================
Sono arrivato al punto che non riesco a far andare
queste istruzioni assieme quando il metodo ciene chiamato da un
thread ....
Questa mi serve per tenere aggiornati i dati ogni tot secondi
explorerPane.load ();
E questa per stampare i dati
           for (int i = 0; i <numMessaggi; ++i)
          {
            System.out.println("Indice " + i + " " +
myData.getValueAt(i, 3));
                      }
            }
Devo riuscire a farle andare assieme ....
=======================================================
Avete qualche suggerimento ?
Qualche idea ?
Grazie
Ciao

 Qualche idea ?
A costo di essere ovvio, ti suggerirei di usare *opportunamente* dei 
blocchi synchronized allo scopo di scrivere dei metodi thread-safe.
Ma questo dovresti saperlo. Sei tu il consulente.
-- 
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre/Spammers loop
schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'

 schijten/Spammers macht Euch vom Acker/Spamerzy wypierdalac'- Nascondi testo citato
Ho un thread unico non in concorenza con altri ... i metodi
synchonized ..
sono già definiti nelle classi che uso .... ossia i due metodi IBM che
uso sono
già sincronizzati ... e poi essendoci un unico thread anche non lo
fossero non credo
fosse necessario sincronizzarli ... ma ripero già lo sono ....
Comunque ho  risolto creando 2 thread concorenti uno a intervalli
carica la tabella e
l'altro la scorre ...
Ora funziona tutto .... Probabilmente vi era una qualche variabile in
comune che rimaneva
sporca richiamando i due metodi da dentro lo stesso metodo run()  ....
Ora che ogni thread
viene istanziato da una sua classe ed ha il suo metodo run() il
problema é sparito ...
Si sono un consulente ... ma a differenza di certi .... non del tipo
so tutto io ....
O come sei tu che diffami e offendi la  gente ... sto sempre
aspettando che tu mandi i sorgenti
da dove copio le mie utility .... guarda che sei passibile di denuncia
per diffamazione ...
Vedi di non passare i limiti più di quello che già hai fatto ... con
nessuna stima ti saluto ..
By il gattto

 un processo Thread non funziona più ...
E' un po' complicato risalire all'errore con solo lo stack trace e
senza poter eseguire il codice..
ma se dovessi scommettere su due cause :
1) Dalla Stack trace direi che stai lavorando su un app swing, hai
tenuto presente che se NON puoi
aggiornare una componente swing da una thread che crei tu, ma devi
chiamare EventQueue.invokeLater ?
2) Potrebbe essere un problema di syncronizzazione, e' stano veder
lanciare una noSucElementException, vuol dire che e' stato chiamato
nextElement su un enumeration che non aveva piu' elementi.. il prob
puo essere che una thead ha chiamato hasNext() verificando che esiste
un altro elemento, e un altra thread gliel ha tolto da sotto il culo
prima che riesca a prendertlo..

 Mi sono perso qualcosa?
Si', ma e' meglio cosi'! Almeno per te.
:-))
Sono commenti fatti all'indirizzo del sedicente Consulente EDP in altro n.g.


 so tutto io ....
Ah no? Mi sara' sembrato.


 risate. Sei un grande, insieme al suggeritore di programmi da realizzare.
Grazie, molto gentile. ;o) 

 risate. Sei un grande, insieme al suggeritore di programmi da realizzare.
Vedo che l'hai trovato!
:-))
