Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Thread [ Divers / Général ] (kyokosan)

jeudi 21 février 2008 à 22:04:16 | Thread

kyokosan

salut
j'ai un problème de thread quand je compile j'ai ce message d'erreur

java.lang.IllegalMonitorStateException: current thread not owner
 at java.lang.Object.wait(Native Method)
 
Voici la partie qui me cause problème:
public class Requete extends Thread {
void run()
.
.
.
.
.

              Dialog1.fin+=1;
             Dialog1.file_globale[Dialog1.fin]=this;
             synchronized( Dialog1.file_globale[Dialog1.fin]){
               try{Dialog1.file_globale[Dialog1.fin].wait();}//l'erreur a ce niveau
               catch(InterruptedException ex4){}
             }
.............}

public classe Agent{
....... while(Dialog1.fin>=Dialog1.deb){ //la file n'est pas vide

   synchronized(Dialog1.file_globale[Dialog1.deb]){
                       Dialog1.file_globale[Dialog1.deb].notify();
                       Dialog1.deb+=1;
              }
          }
            Dialog1.deb=0;//reinitialiser la file globale des requetes
        Dialog1.fin=-1;}
file_globale est un vecteur de type Requete (thread) et c'est dans cette file que je veux  bloquer les requêtes

le lancement de ce Thread se fait par
public class lancer(){Requete requ=new Requete[nb_req].........

for (int n = 0; n < nb_req; n++) {
    requ[n].start();}...............................}

l'erreur se trouve au niveau de l'instruction : try{file_globale[fin].wait();}

pourriez vous m'expliquer la raison de cette erreur
merci beaucoup


lundi 25 février 2008 à 11:53:22 | Re : Thread

uhrand


Ton code fonctionne pour moi:

public class TestRequete {

    private int nb_req = 5;

    public TestRequete() {
        lancer();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException ex) {
        }
        Agent();
    }
//le lancement de ce Thread se fait par:
    private void lancer() {
        Requete[] requ = new Requete[nb_req];

        for (int n = 0; n < nb_req; n++) {
            requ[n] = new Requete(n);
            requ[n].start();
        }
    }

    private void Agent() {
        while (Dialog1.fin >= Dialog1.deb) { //la file n'est pas vide

            synchronized (Dialog1.file_globale[Dialog1.deb]) {
                Dialog1.file_globale[Dialog1.deb].notify();
                Dialog1.deb += 1;
            }
        }
        Dialog1.deb = 0;//reinitialiser la file globale des requetes
        Dialog1.fin = -1;
    }

    public static void main(String[] args) {
        new TestRequete();
    }
}

class Requete extends Thread {

    private int n;

    public Requete(int n) {
        this.n = n;
    }

    @Override
    public void run() {

        Dialog1.fin += 1;
        Dialog1.file_globale[Dialog1.fin] = this;
        synchronized (Dialog1.file_globale[Dialog1.fin]) {
            try {
                Dialog1.file_globale[Dialog1.fin].wait();
                System.out.println(n + " " + " OK");
            } catch (InterruptedException ex4) {
                ex4.printStackTrace();//l'erreur a ce niveau
            }
        }
    }
}

class Dialog1 {

    static int deb;
    static int fin = -1;
    /*file_globale est un vecteur de type Requete (thread)
    et c'est dans cette file que je veux  bloquer les requêtes*/
    static Requete[] file_globale = new Requete[10];
}



Cette discussion est classé dans : fin, file, thread, globale, dialog1


Répondre à ce message

Sujets en rapport avec ce message

thread [ par kyokosan ] salut J'ai un problème de thread, en exécutant le code il m'affiche ce message d'erreurjava.lang.IllegalMonitorStateException: current thre erreur thread [ par kyokosan ] salut j'ai un problème  de thread et je n'arrive pas a interpréter le message d'erreurvoici la partie ou se trouve l'erreur         fin+=1; Thread Et accés conccurent [ par suzukMan ] Bonjour,Je dois réaliser un programme en java qui simule le traitement des processus par un systéme. J'ai au depart 2 Threads un qui génére Attendre Thread [ par yamxx ] Voila mon problème : Je lance un Thread dans un ActionListener lors de l'activation d'un bouton, mais il faudrait que j'attende la fin du Thread pour Pb: copie du contenu d'un repertoire dans un autre [ par kam81 ] salut,je voudrais faire la copie du contenu d'un repertoire dans un autre, cette tâche dois se faire à chaque fois un fichier est inséré dans ce reper thread [ par soumia_info ] salut , j'ai realise une application qui recharger une classe deja existe et de l'instancie , mais si la classe  est deja instancie  les dernier moifi destroy un thread [ par soumia_info ] salut ,mon probleme est le suivant:quand je fait   monthread.destroy (monthread est le nom d'un thread)le system m'afficher les erreurs suivantes:java Rafraichissement d'un JTable ? [ par Palleas_44 ] Bonjour :]Dans le cadre d'un projet personnel, je dois creer une interface graphique en java pour une application. C'est pas très clair effectivement. scanner de vulnérabilités [ par shnam ] bnjour  voila j suis etudiante en fin de cycle et mon theme de fin de cycle et la realisation d'un audit de vulnerabilités informatiques je voudrais s Simuler un input file dans un applet [ par lulu42 ] Bonjour à tous !    J'ai besoin de vos lumière car j'ai besoin de simuler le fonctionnement d'un dans un applet java. En fait mon applet créé une sor


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.