[JAVA] Probleme bizarre avec des threads

Probleme bizarre avec des threads [JAVA] - Programmation

Marsh Posté le 09-04-2001 à 11:46:44    

Voila j'ai créé une classe qui hérite de Thread et qui fait diffférents traitements.
 
Dans une autre classe j'ai comme attributs un tableau de cette classe :
 
MonThread []tabthread;
 
et un déclaré seul
 
MonThread th;
 
le tableau c'est pour pouvoir en lancer plusieurs en parallèle (9 exactement)
une fois ces 9 threads morts, quand je veux faire un start() du thread unique (th.start()) il se lance 9 fois !!!!
 
Qui pourrait m'aider pour ca ? je comprends pas !  
C'est extremement urgent en +
Merci d'avance !


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 11:46:44   

Reply

Marsh Posté le 09-04-2001 à 12:54:03    

Y'a peut-être une boucle qui traîne ...
 
Ce serait certainement plus facile si on pouvait voir le code

Reply

Marsh Posté le 09-04-2001 à 13:01:52    

Non , aucune boucle, cela réagit a partir de listener(clic sur un bouton)
 
voici un bout de code :
 
public void actionPerformed(ActionEvent ev) {
 
 
                if (ev.getActionCommand().equals("Display" )
                {
                        _progress_bar = 0;
                        repaint();
                        ta.append("Please wait...\n" );
       
                        _cgi = new CGI("http://15.129.22.198/cgi-bin/conf-rcons.sh", ta, this, false, 0);
                        _cgi.start();
                        _progress_bar = 618;
                        repaint();
                 }
                else if (ev.getActionCommand().equals("Ping" )
                {
                        _progress_bar = 0;
                        repaint();
               
                        _cgi = new CGI("http://15.129.22.198/cgi-bin/tftp.sh", ta, this, false, 0);
                        _cgi.start();
                        _progress_bar = 618;
                        repaint();
                }
 
 
                else if (ev.getActionCommand().equals("Load" ))
                {
                        _progress_bar = 0;
                        repaint();
                        loadTemp();
                }
        }
 
ensuite dans la fct° loadTemp j'utilise mon tableau
 
 ta.append("Loading configuration into R1 Router...\n" );
                _cgis[0] = new CGI("http://15.129.22.198/cgi-bin/conf.sh?15.129.22.201+template-r1-confg+R1", ta, this, true, 1);
                _cgis[0].start();
 
                ta.append("Loading configuration into R2 Router...\n" );
                _cgis[1] = new CGI("http://15.129.22.198/cgi-bin/conf.sh?15.129.22.202+template-r2-confg+R2", ta, this, true, 2);
                _cgis[1].start();
 
                ta.append("Loading configuration into R3 Router ...\n" );
                _cgis[2] = new CGI("http://15.129.22.198/cgi-bin/conf.sh?15.129.22.203+template-r3-confg+R3", ta, this, true, 3);
                _cgis[2].start();
 
                ta.append("Loading configuration into R4 Router...\n" );
                _cgis[3] = new CGI("http://15.129.22.198/cgi-bin/conf.sh?15.129.22.204+template-r4-confg+R4", ta, this, true, 4);
                _cgis[3].start();
 
 
(je mets pas tout car ca se ressemble) ...
j'espere que c pas trop ambigu)


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 13:56:22    

Je pige pas bien ce qui va pas ...
Il faudrait des explications supplémentaires sur ce qui ce passe, un exemple sur le comportement du code genre :
- appel de la fonction truc, il se passe ...  
- appel de ..., il se passe  ...
- etc ...
 
Essaye d'être le plus precis possible, car sans le code complet, c'est dur de voir ce qui va pas.

Reply

Marsh Posté le 09-04-2001 à 14:02:10    

Bon :
 
- clic sur le bouton "Display" appel de la méthode actionPerformed qui crée un Thread CGI.
Cd trhead CGI appelle dans sa fonction run une méthode executeCGI qui utilse une URLCOnnection pour executer un script.
 
- clic sur le bouton "Load" appel de actionPerformed qui lui appelle alors loadTemp()
dans loadTemp() se créeent 9 Thread CGI lancés les uns a la suite des autres (quasi parallelement). Ca c okk
 
- mais quand je reclique sur "Display" il est sensé faire la meme chose qu'au début mais en fait il le fait neuf fois !
Comme si il lançcait 9 thread !  
 
Merci , j'espere plus clair :)


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 14:02:33    

Bon :
 
- clic sur le bouton "Display" appel de la méthode actionPerformed qui crée un Thread CGI.
Cd trhead CGI appelle dans sa fonction run une méthode executeCGI qui utilse une URLCOnnection pour executer un script.
 
- clic sur le bouton "Load" appel de actionPerformed qui lui appelle alors loadTemp()
dans loadTemp() se créeent 9 Thread CGI lancés les uns a la suite des autres (quasi parallelement). Ca c okk
 
- mais quand je reclique sur "Display" il est sensé faire la meme chose qu'au début mais en fait il le fait neuf fois !
Comme si il lançcait 9 thread !  
 
Merci , j'espere plus clair :)


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 14:10:04    

Est ce qu'il y a des membres statiques dans ta classe CGI ?
A quoi servent les deux derniers parametres du constructeur de la classe CGI ?
Si tu appelles plusieurs fois de suite "Display", ca marche correctement ?
 
Il m'a l'air retorse ton pb ...  :crazy:

Reply

Marsh Posté le 09-04-2001 à 14:14:43    

LEs 2 deux derniers parametres ne sont pas importants et n'interviennent pas.
mais il n'y a pas non plus de fonction/attribut statiques...
 
si je clique plusieurs fois de suite sur Display en premier, aucun probleme ... je capte rien pourtant les threads c pas dur !


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 14:28:52    

Et le 2eme appel à "Display", il exécute 9 fois la meme chose ?
Soit ton pb est à une solution conne (assez classique en prog) et super évidente, que je ne vois pas, soit ca ne vient pas des threads mais de ta classe CGI, avec un pb du style limite du nb de connexions ou je sais pas quoi d'autre ...
Je te conseille de rajouter des println() partout pour tracer au maximum ce qui se passe.
Autre idée, au lieu de dériver de la classe Thread, dérive ta classe de l'interface Runnable, il suffit d'implémenter la méthode run() et ca roule ...
Enfin, fait bien gaffe à tes objets et aux réfences qu'il y dessus, pour ne pas appeler le mauvais objet au mauvais moment.

Reply

Marsh Posté le 09-04-2001 à 14:58:57    

Ok je vais essayer ca,  
merci de ton aide bat


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 09-04-2001 à 14:58:57   

Reply

Marsh Posté le 10-04-2001 à 11:42:41    

Et bien non j'ai fait pas mal de corrections et cette fois cela ne se lance pas 9 fois mais 2 ... ce n'est à plus rien y comprendre !!! Threads  :gun:


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 10-04-2001 à 14:40:21    

Un petit up je suis vraiment trop dans la m...  :fou:  :crazy:


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 10-04-2001 à 15:45:32    

Dernier up puis j'abandonne...


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 10-04-2001 à 17:19:02    

Modérateurs, virez moi ce topic svp, il n'est pas résolvable...


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed