IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

La simulation d’impression avec une imprimante partagée dotée d’un spooler


Sujet :

Java

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 1
    Par défaut La simulation d’impression avec une imprimante partagée dotée d’un spooler
    salut à tous,
    Je suis un débutant dans la programmation parallèle, je dois défendre un tp en java sur la programmation parallèle le 05/09/2011
    j'ai essayé de simuler l'impression sur une imprimante doté d'un spooler mais quand j'essaie de compiler ce code il me cette erreur:
    Page 1 du Premier Document
    Page 1 du Deuxième Document
    Debut d'impression: Page de garde
    Fin d'imprression0 Pages imprimées
    Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
    at java.lang.Object.notifyAll(Native Method)
    at final_Simulimp.Imprimeur.Imprimer(Impression.java:55)
    at final_Simulimp.Imprimeur.run(Impression.java:70)
    at java.lang.Thread.run(Unknown Source)
    je vous prie de m'aider svp!

    voici le code sous eclipse hellios:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package final_Simulimp;
     
    public class Impression extends Thread{
     
    	public Impression(String s){
    		super(s);
    	}
     
    	static Imprimeur Printer;
    	String[]pages;
    	public void run(){
    		synchronized (Printer) {
    			pages=new String[100];
    			for(int i=0;i<pages.length;i++){
    				System.out.println("Page "+(i+1)+" du "+getName());
    				Printer.spool(pages);
    				//Printer.Imprimer();
     
    				}
     
    		}
    	}
    	public static void main(String[] args) {
    		Printer= new Imprimeur();
     
    		new Impression(" Premier Document").start();
    		new Impression(" Deuxième Document").start();
    	}
     
    }
    class Materiel{}
    class Imprimeur extends Materiel implements Runnable{
    	String []spooler=new String[100];
    	int index=0;
    	boolean pageEnAttente=false, runnable=false;
    	Thread ImprimanteThread;
     
    	Imprimeur(){
    		ImprimanteThread=new Thread(Imprimeur.this);
    		ImprimanteThread.setDaemon(true);
    		ImprimanteThread.start();
    	}
    	public void Imprimer(){
    		System.out.println("Debut d'impression: Page de garde");
    		int j=0;
    		for(int i=0;i<spooler.length;i++){
    			if (spooler[i]!=null){
    				//System.out.println(spooler[i]);
    				j++;
    				spooler[i]=null;
    				}
    		}
    		System.out.println("Fin d'imprression"+j+" Pages imprimées");
    		pageEnAttente=false;
    		notifyAll();
    	}
    	public synchronized void spool(String[]p){
    		for(int i= 0;i<p.length;i++)
    			spooler[index]=p[i];
    			pageEnAttente=true;
    			try{
    				wait();
    				}catch(InterruptedException e){}
     
    	}
    	public void run(){
    		ImprimanteThread.setPriority(ImprimanteThread.MIN_PRIORITY);
    		while(true){
    			if(pageEnAttente)
    				Imprimer();
    		}
    	}
     
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Comme l'indique l'exception, tu appelles notifyAll() à un endroit où ton thread n'est pas détenteur d'un moniteur, et donc pas de thread en attente de ce moniteur à notifier.

    À quoi sert ce notifyAll() ? De manière générale, quelle est la logique de ce code ? Nous n'allons pas essayer de le décrypter, à toi de t'expliquer.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Envoyer une impression vers une imprimante réseau sous DOS
    Par atasekpo dans le forum Administration
    Réponses: 3
    Dernier message: 28/06/2010, 15h58
  2. Impression avec une imprimante à ticket de caisse
    Par freud dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 13h50
  3. CR XI : un rapport qui plante avec une imprimante particulière help !
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 27/09/2007, 09h54
  4. Forcer l'impression sur une imprimante
    Par Poussy-Puce dans le forum ASP
    Réponses: 1
    Dernier message: 21/11/2006, 00h27
  5. Problème avec une imprimante ZEBRA TLP2844
    Par burkan dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 07/08/2005, 20h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo