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 :

ordonnancement des processus en java


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut ordonnancement des processus en java
    Bonjour,

    J'ai un programme java où je souhaiterai ordonner mes processus dans le main,
    par exemple :

    1) Exécution processus 1.
    2) Exécution du processus 2 une fois que le processus 1 est terminé.

    Est ce qu'il y un moyen de le faire sans passer par les threads

    Merci d'avance pour vos réponses

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Bah appeler le code executé par le processus 1 puis celui du processus 2 l'un apres l'autre ? Comme ca, tu es sur d'etre dans le meme thread et que le code 1 est terminé avant le 2...

  3. #3
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Quel est l'intérêt de faire deux processus si tu ne les fais pas tourner en même temps ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Merci hwoarang pour ta réponse, je viens de faire un premier test et ça marche bien, je pensais que l'odre dans lequel on écrivait le code n'avait pas d'importance en opposition au anciens languages de programmation (type pascal).

    Neptus d'abord je te remercie pour ta réponse, je developpe une application pour le traitement automatique de fichiers pdf (fusion, découpage...) et dans mon main je doit exécuter le code dans un ordre précis:

    1) Découpage des fichiers.
    2) Extraction de l'information.
    3)Recombinaison suivant une certaine logique.

    Donc je suis obligé de faire tourner mes processus l'un après l'autre.

  5. #5
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Je ne pense pas non.
    Si tu tiens à faire des processus différents, tu en fais un par fichier :
    Ton run va contenir les appels aux 3 fonctions suivantes :
    1) Découpage des fichiers.
    2) Extraction de l'information.
    3)Recombinaison suivant une certaine logique.
    (Attention : si tu manipule des variables statiques, pense bien au synchronized)

    Et tu peux lancer 1, 2, 3, 5, 10, 15 processus de transformation de fichiers en parallèle.
    Mais les tâches 1-2-3 ne doivent pas être lancées dans des processus différents.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Salut NeptuS,

    Ce que je veux faire

    public static void main(String[] args){

    Processus 1

    Processus 2 (qui utilise des sorties du Processus 1)

    Prcocessus 3 (qui utilise des sorties des Processus 1 et 2)
    }

    Comment s'y prendre avec le run?

  7. #7
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Mais pourquoi PROCESSUS ??
    tu lances une commande externe ?
    Pourquoi n'utilises-tu tout simplement pas des fonctions ?

    Ma question est : Comment justifies-tu d'utiliser des processus ici ?

    Un bout de ton code, peut-être ? ça aidera à comprendre

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Salut,

    Voici un bout de mon code, les fonctions utilisées je les ai créé dans des classes séparées: MergePDF, SplitPDF, Extraction...

    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
    package test;
     
    import java.io.File;
    import java.io.IOException;
    import com.itextpdf.text.DocumentException;
     
     
    public class Test {
     
    	public Test(){
            new SplitPDF();
            new MergePDF();
            new Replace();
            new Extraction();
            new Conversion();
     
            }
     
    	public static void main(String[] args) throws DocumentException, IOException { 
    		//destination des fichiers dans le repertoire TEMP du système
    		File repertoireTemp = new File("C:\\TEMP\\Essai");
    		repertoireTemp.mkdirs();
    		String destination = "C:\\TEMP\\Essai\\";
     
    		//découpage du pdf		
    		String fichier = "C:\\test\\rcn.pdf";
    		int n1 = SplitPDF.decouper(fichier, destination);//nombre de pages de rcn.pdf	
     
    		//découpage et analyse des pdf
    		String fichierA = "C:\\test\\fa.pdf";
    		SplitPDF.decouper(fichierA, destination);
    		int n2 = SplitPDF.decouper(fichierA, destination);//nombre de pages de fa.pdf
     
    		// extracion de l'information		                  
    		for (int i = 2; i <= n2; i++) {
     
    			Conversion.convertir(destination+"fa"+Integer.toString(i)+".pdf", destination);
    			int l= Extraction.extraire(destination+"fa"+Integer.toString(i)+".txt", n1);
    			Replace.remplace(destination+"rcn"+Integer.toString(l)+".pdf", destination+"fa"+Integer.toString(i)+".pdf");
     
     
                      }		
     
    		//fusionner les pdfs
    		String[]fichiers = null; 
    		for (int i=0;i<=61;i++){
    			fichiers[i]= destination+"rcn"+Integer.toString(i+1)+".pdf";
    			MergePDF.Coller(fichiers, destination);
     
     
    		}
     
     
    		}
     
     
    	}

    Quand je compile, mon programme exécute bien toutes les instructions jusqu'à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //fusionner les pdfs
    		String[]fichiers = null; 
    		for (int i=0;i<=n2-1;i++){
    			fichiers[i]= destination+"rcn"+Integer.toString(i+1)+".pdf";
    			MergePDF.Coller(fichiers, destination);

    Où il me ressort l'erreur suivante:

    Exception in thread "main" java.lang.NullPointerException
    at test.Test.main(Test.java:50)

  9. #9
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Bon, une partie du voile s'ouvre : tu n'utilise pas de processus.
    Tu devrais peut-être parler de "traitement" ou de "passage dans une fonction".
    Le "processus" a une signification particulière en informatique.

    Tes classes me semblent utilisée d'une façon plutôt bizarre. Pourrais-tu donner le code de MergePdf par exemple ? On va commencer par là.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Salut NeptuS, ci-dessous mon code pour la classe MergePDF

    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
    package test;
     
    import java.io.*;
    import com.itextpdf.text.*;
    import com.itextpdf.text.pdf.*;
     
    public class MergePDF {  
     
        public static void Coller(String[] files, String destination){
           try {
     
             Document PDFCombineUsingJava = new Document();
             PdfCopy copy = new PdfCopy(PDFCombineUsingJava, new FileOutputStream(destination+"CombinedPDFDocument.pdf"));
             PDFCombineUsingJava.open();
             PdfReader ReadInputPDF;
             int number_of_pages;
             for (int i = 0; i < files.length; i++) {
                     ReadInputPDF = new PdfReader(files[i]);
                     number_of_pages = ReadInputPDF.getNumberOfPages();
                     for (int page = 0; page < number_of_pages; ) {
                             copy.addPage(copy.getImportedPage(ReadInputPDF, ++page));
                           }
             }
             PDFCombineUsingJava.close();
           }
           catch (Exception i)
           {
               System.out.println(i);
           }
       }
    }

  11. #11
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    ok .. alors plusieurs points :
    - Personnellement, j'aurai placé tes 4 méthodes statiques dans la même classe. (nommée PdfHandler par exemple). Mais rien d'obligatoire là dedans.
    - On instancie une classe à partir du moment où on veut manipuler un objet de cette classe : tes new dans ton constructeur de Test sont totalement inutiles : supprime cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Test(){
            new SplitPDF();
            new MergePDF();
            new Replace();
            new Extraction();
            new Conversion();
    }
    - Ta ligne 50 de ta classe Test ne contient rien. Peux tu donner le code et l'erreur qui vont ensemble stp ?

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Merci NeptuS pour ta réponse, j'ai supprimé les news, merci pour ta remarque et j'ai aussi réussi à faire tourner mon programme. Maintenant je souhaiterai modifier mon code au niveau de l'extraction de l'information :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Conversion.convertir(destination+"fa"+Integer.toString(i)+".pdf", destination);
    int l= Extraction.extraire(destination+"fa"+Integer.toString(i)+".txt", n1);
    Replace.remplace(destination+"rcn"+Integer.toString(l)+".pdf", destination+"fa"+Integer.toString(i)+".pdf");
    Je veux modifier mon code pour dire que si si ma méthode :

    Extraction.extraire(...) me retourne une valeur, j'applique la méthode remplace.

  13. #13
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    à priori, ta méthode extraire retourne toujours une valeur .. peux-tu donner le code de extraire s'il te plait ?

    ça dépend de ta valeur de retour en cas d'erreur : 0, -1, null ...
    C'est cette valeur que tu va tester dans un simple if()

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Disant que j'ai un peu triché pour le test, j'ai choisi un fichier où toutes les pages contiennent l'information (de la forme /nbages) que je rechecrhais, ci dessous le code de ma classe Extraction (j'extrait l'information à partir d'un fichier texte):

    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
    package test;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
     
    public class Extraction {
     
    	/**
             * @param args
             * @return 
             * @throws FileNotFoundException 
             */
    	public static int extraire(String fichier, int nbpages) throws FileNotFoundException {
     
    		int k = 0;
    		Scanner scanner = new Scanner(new File(fichier));		
    		while (scanner.hasNext()){
    			String monString = scanner.next();
    			if (monString.endsWith("/"+Integer.toString(nbpages)))
    			{
     
    			k = Integer.parseInt(monString.substring(0, monString.indexOf("/"+Integer.toString(nbpages))));
    			if (k <= nbpages)
    			System.out.println(k);
    			}			
    	    }
    		return k;				
    	}
     
    }

  15. #15
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Donc ta valeur d'erreur est 0, c'est bien ça ?
    Tu ne veux remplacer que si extraire ne retourne pas 0, si j'ai bien compris.

    tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Conversion.convertir(destination+"fa"+Integer.toString(i)+".pdf", destination);
    int l= Extraction.extraire(destination+"fa"+Integer.toString(i)+".txt", n1);
    if(l > 0){
        Replace.remplace(destination+"rcn"+Integer.toString(l)+".pdf", destination+"fa"+Integer.toString(i)+".pdf");
    }
    tout simplement

  16. #16
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Merci encore une fois pour ta réponse, mais il se peut que ma méthode ne trouve pas d'information (/nbpages) dans mon fichier texte dans certain cas, dans ce cas la méthode ne retourne rien, ma question est comment faire pour dire que si ma méthode ne retourne rien (j'ai pensé à null, mais int est un type primitif)

  17. #17
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Je ne comprend pas ta question .... déroulons l'algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - k = 0
    - Création d un scanner
    - Loop while : il existe un item suivant dans le scanner
         - monString = item suivant dans le scanner
         - Si monString finit par "/" + nbPages Alors
                 - k = l entier avant le "/"
                 - Si k < nbPages Alors
                         - Afficher k
                 Endif
         Endif
    End Loop
    Donc, si je résume :
    Tu donnes un nom de fichier et un nombre de pages
    Tu parcours ton fichier
    Si tu trouve le numéro de page, tu l'enregistre
    tu affiche les numéro de pages trouvés jusqu'à nbPages
    tu retourne le dernier numéro de page trouvé (même si supérieur à nbPages)


    DONC :
    au pire, tu as 0
    au mieux, tu as le nombre de pages.

    Si il n'y a pas de pages dans ton document ou si il ne trouve pas "/"+nbPages, il te renverra bien 0
    Est-ce que ton but est de différencier ces 2 raisons ?

  18. #18
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Je t'explique ce que je veux faire,

    J'ai deux fichiers pdf, un.pdf et deux.pdf par exemple,

    nbpages = nombre de pages de un.pdf

    le fichier deux.pdf contient des pages qui doivent remplacer certaines pages de un.pdf, si par exemple la page 4 du deux.pdf doit remplacer la page 17 du un.pdf, dans la page 4 du deux.pdf il y une information 17/nbpages (17 c'est le l dans mon code).

    J'ai réussi à faire mon algorithme, ce qu'il me reste à faire c'est que certaines pages du fichier deux.pdf ne sont pas destinées à remplacer des pages de un.pdf. En conséquence il ne contiennent aucune information du type l/nbpages. J'espère que j'étais clair, et merci encore une fois.

  19. #19
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Non, ce n'est pas vraiment clair.
    Le retour de ta méthode, c'est juste 1 seul numéro de page trouvé dans le fichier 2, ou bien, c'est :
    renvoyer un tableau de valeurs qui associe à chaque page du fichier 2 comportant la bonne chaîne '/nbpages' le numéro de la page du fichier 1 correspondante ???

  20. #20
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Par défaut
    Merci NeptuS, c'est pas très urgent non plus

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ordonnancement des processus
    Par rahma106 dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 16/02/2015, 16h07
  2. ordonnancement et synchronisation des processus
    Par maestroENSI dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 14/11/2010, 17h45
  3. Modelisation des processus en java
    Par Otero dans le forum Débuter
    Réponses: 6
    Dernier message: 26/01/2009, 11h40
  4. ordonnancement des processus
    Par amazigh_man dans le forum Linux
    Réponses: 0
    Dernier message: 06/09/2008, 17h41
  5. Question ordonnancement des processus
    Par amazigh_man dans le forum Linux
    Réponses: 4
    Dernier message: 18/08/2008, 16h04

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