Probleme Runtime Java

vona23
Probleme Runtime Java

J'ai un gros probleme avec le code suivant, et s'il y a quelqu'un qui peut m'aider...

import...
public class shell {
public static void main(String[] args){
try{

String shell="cmd.exe /c pdf2ps 19930.pdf 19930.ps";
Process proc=Runtime.getRuntime().exec(shell);

BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String str;
while ((str = in.readLine()) != null) {
System.out.println(str);
}
in.close();
}catch(Exception e){

}
}
}

Le programme fait appel à ghostscript par l'intermediaire d'un fichier .BAT qui lui même fournit avec ghoscript dans son repertoire /lib
Son rôle est de convertir un fichier PDF en PS, si c'est un petit fichier ça marche mais si c'est un gros fichier le processus reste en mémoire (gestionnaire de taches windows) et dès que je stoppe le processus parent (c:\java sell), ghostscript continue la conversion du fichier PDF en PS.
Quelqu'un peut m'aider....

fredericmazue

Quote:

Quelqu'un peut m'aider....

Facile :)

Ton code ne peut pas marcher. C'est même presque une FAQ de Java. Le problème est que les tampons d'entrées/sorties du système (l'OS je veux dire) saturent si tu fais comme ça.

La solution est de lire le Stream dans un thread.
Dans ton Programmez! 82 il y a un article qui explique exactement comment faire tout ça.
Sinon tu vas sans doute trouver des renseignements sur le site de Sun, car comme je te dis, c'est tellement fréquent comme problème que je parierais volontiers qu'ils expliquent ça quelque part.

vona23

En fait la partie lecture, je n'en ai pas trop besoin c'était juste pour controler si le programme affiche quelque chose, le seul truc que j'ai besoin ce qu'il fait tourner le ghostscript et que la conversion du PDF en PS marche. J'ai bien lu l'article dans prog..82 mais ça ne resout pas mon probleme.

fredericmazue

Quote:

le seul truc que j'ai besoin ce qu'il fait tourner le ghostscript et que la conversion du PDF en PS marche

Hem quand on lit ta question initiale, ce n'est pas ce qu'on comprend... Enfin ce n'est pas ce que j'avais compris du moins.

Bon, peu importe. Tu as bien écrit ça:

Quote:

si c'est un petit fichier ça marche mais si c'est un gros fichier le processus reste en mémoire

Moi je te redis que c'est typique d'une mauvaise utilisation de Runtime.exec. Puisque tu as lu l'article dans Programmez! 82 (ce dont je ne peux que te féliciter :) ) tu y as lu qu'il est aussi recommandé de faire un process.waitFor(); parmi d'autres recommandations.
Relis le, et tu résoudra sans doute ton problème. L'article a été écrit *spécialement* pour résoudre ton problème, je t'assure ;)

Au fait

Quote:
En fait la partie lecture, je n'en ai pas trop besoin

Tu es sûr ? Tu es bien sûr que pdf2ps n'émet jamais rien ?
vona23

C'est résolu, merci beaucoup, j'ai relu le magazin n° 82 et j'ai trouvé la solution. En fait, c'est le flux de sorti stderr qui est saturé car il y avait eu beaucoup de warning. Puis en appliquant la class StdHandler dans programmez n°82 ça a marché.
Thanks !!!!