[JAVA] Problème de process
Résolu/Fermé
freto
Messages postés
1543
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
-
21 mars 2008 à 16:39
freto Messages postés 1543 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 8 avril 2016 - 2 mai 2008 à 14:30
freto Messages postés 1543 Date d'inscription vendredi 6 juillet 2007 Statut Membre Dernière intervention 8 avril 2016 - 2 mai 2008 à 14:30
A voir également:
- [JAVA] Problème de process
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Process hacker - Télécharger - Divers Utilitaires
- Process explorer - Télécharger - Informations & Diagnostic
- Java apk - Télécharger - Langages
3 réponses
freto
Messages postés
1543
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
162
25 mars 2008 à 10:51
25 mars 2008 à 10:51
Encore une fois, la solution m'est venue toute seule, seulement je ne sais pas pourquoi sa fonctionne.
J'ai juste récupéré les flux du process dans un Thread, et maintenant la récupération se fait completement. Le seul soucis, c'est que mon thread stoque la sortie dans une chaine de caractère, mais cette sortie n'est pas complete. Lorsque je l'affiche, j'ai que les n premiers fichiers récupérés, n étant inférieur au nombre de fichiers totals.
Je planche la dessus pour avoir la sortie standard complète.
J'ai juste récupéré les flux du process dans un Thread, et maintenant la récupération se fait completement. Le seul soucis, c'est que mon thread stoque la sortie dans une chaine de caractère, mais cette sortie n'est pas complete. Lorsque je l'affiche, j'ai que les n premiers fichiers récupérés, n étant inférieur au nombre de fichiers totals.
Je planche la dessus pour avoir la sortie standard complète.
freto
Messages postés
1543
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
162
2 mai 2008 à 10:41
2 mai 2008 à 10:41
Jme permet de faire un ti up de ce post, car un nouveau problème apparait: maintenant il me récupère bien un projet total (plus de 1000 fichiers, c'est un peu long mais sa passe), tandis qu'il ne peut jamais récupérer un fichier seul: en gros, dans mon Thread de lecture, lorsqu'il doit récupérer 1000 fichiers, le BufferedReader me ressort à peu près immédiatement une ligne pour alimenter un controle ProgressMonitor, mais quand il ne doit récupérer qu'un seul fichier (voire même une dizaine), le flux n'est jamais prêt à être lu, et du coup il bloque.
Voici le code de lecture, placé dans un SwingWorker:
A savoir que la classe TraitementCVS hérite d'une classe Traitement, elle même héritante de Thread. Donc au total on a un thread qui exécute la commande CVS et me renvoie un BufferedReader, un SwingWorker qui lit dans ce BufferedReader et qui est censé placer chaque ligne dans un ProgressMonitor (qui au passage ne peut pas s'afficher, vu que le flux n'est pas lu).
Chose importante aussi: l'exécution arrive jusqu'à System.out.println("On attend que le flux soit pret"); et tourne en boucle: cela veut dire qu'il arrive à lire une ligne quand même, mais il ne m'affiche pas le ProgressMonitor.
En espérant que quelqu'un pourra m'aider...et que j'aurai été assez complet.
Merci d'avance...
Voici le code de lecture, placé dans un SwingWorker:
compteFichiers = new TraitementCVS(Constantes.COMPTAGE_FICHIERS); compteFichiers.setProjPath(modCourant); compteFichiers.setRevision(version); compteFichiers.start(); BufferedReader inComptage; String lineCmpt; nbFichiers = 2000; try { compteFichiers.join(); } catch (Exception eCompt) { System.out.println("Erreur lors du comptage des fichiers dans le module"); eCompt.printStackTrace(); } finally { try { inComptage = compteFichiers.getResult(); while ((lineCmpt = inComptage.readLine()) != null) { nbFichiers = Integer.parseInt(lineCmpt); } moniteur.setMaximum(nbFichiers); } catch (Exception eLecture) { System.out.println("Erreur lors de la lecture du nombre de fichiers"); eLecture.printStackTrace(); } } //On peut maintenant lancer le traitement CVS avec le module courant recupModule = new TraitementCVS(Constantes.RECUPERER_PROJET); recupModule.setProjPath(modCourant); recupModule.setRevision2(this.version); recupModule.start(); //NE RESTE PLUS QU'A RECUPERER LE RESULTAT DU TRAITEMENT!!! try { Thread.sleep(2000); } catch (Exception eAttenteRecup) { eAttenteRecup.printStackTrace(); } finally { BufferedReader inRecup = recupModule.getResult(); String line; try { progress = 0; line = inRecup.readLine(); while (line != null) { //chaque ligne correspond à un fichier récupéré progress++; moniteur.setProgress(progress); System.out.println(line); moniteur.setNote(line); if (moniteur.isCanceled()) { moniteur.close(); recupModule.interrupt(); parent.setEnabled(true); break; } while (!inRecup.ready()){ Thread.sleep(10); System.out.println("On attend que le flux soit pret"); } line=inRecup.readLine(); System.out.println("Ligne Lue"); } System.out.println("On a fini de lire les lignes"); } catch (Exception lecture) { System.out.println("Exception lecture recup"); lecture.printStackTrace(); } } } moniteur.close();
A savoir que la classe TraitementCVS hérite d'une classe Traitement, elle même héritante de Thread. Donc au total on a un thread qui exécute la commande CVS et me renvoie un BufferedReader, un SwingWorker qui lit dans ce BufferedReader et qui est censé placer chaque ligne dans un ProgressMonitor (qui au passage ne peut pas s'afficher, vu que le flux n'est pas lu).
Chose importante aussi: l'exécution arrive jusqu'à System.out.println("On attend que le flux soit pret"); et tourne en boucle: cela veut dire qu'il arrive à lire une ligne quand même, mais il ne m'affiche pas le ProgressMonitor.
En espérant que quelqu'un pourra m'aider...et que j'aurai été assez complet.
Merci d'avance...
freto
Messages postés
1543
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
8 avril 2016
162
2 mai 2008 à 14:30
2 mai 2008 à 14:30
Bon encore une fois je retrouve la réponse tout seul...aide toi et le ciel t'aidera comme on dit.
La solution?? fallait faire un System.gc() avant de commencer à récupérer les fichiers (ben ouaip, c'est qu'il y en avait des miettes d'objet encombrantes à ramasser).
Merci quand même...
La solution?? fallait faire un System.gc() avant de commencer à récupérer les fichiers (ben ouaip, c'est qu'il y en avait des miettes d'objet encombrantes à ramasser).
Merci quand même...