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
    Points : 1
    Points
    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 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    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.

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, 16h58
  2. Impression avec une imprimante à ticket de caisse
    Par freud dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 14h50
  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, 10h54
  4. Forcer l'impression sur une imprimante
    Par Poussy-Puce dans le forum ASP
    Réponses: 1
    Dernier message: 21/11/2006, 01h27
  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, 21h49

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