Bonjour à tous,

Je développe actuellement une application linux qui me pose quelques soucis.
En effet, j'essaye de faire communiquer une application java avec un programme en C.
J'essaye pour celà d'utiliser stdout:voici le protocole:
- mon appli C (appelée appliC) est lancée par on programme java (appliJava).
- appliC envoie son pid sur stdout ("pid : XXX") avec un simple printf

- appliJava le récupère (code après)
- applic envoie ensuite des infos sur stdout, également récupérés par appliJava
- le programme C est arrété par l'envoie d'un signal USRSIG2 par appliJava




Mon problème est que cela ne marche pas et me fait planter le pc...

Voici mon code (coté appliJava):
Tout ceci est inclu dans la même classe ...


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
/*Lancement du processus C*/
		Runtime runtime=Runtime.getRuntime();
		try {
			process=runtime.exec(new String[]{"../record/record"});
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			System.err.println("Veuillez r�installer l'outil record");
 
		}


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
//Création du thread de lecture de flux
 
		Thread t = new Thread (new Runnable() {
			public void run() {
				/*Recuperation du pid pour destruction*/
				BufferedReader reader = new BufferedReader(new InputStreamReader(getInputStream()));	
				String line = "";
 
				try {
					while( ((line = reader.readLine()) != null)) {
						//Traitement du flux de sortie
						if(line.startsWith("pid ")){
							pid=line.substring(4);
							System.out.println("pid: "+line);
						}else{
                                                //autre que pid
                                                ....
                                                }
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		);
		t.start(); 
	}

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
/*Destruction du processus*/
public void destroy() {
		if(pid.equals("")) {System.out.println("le pid n'est pas r�cup�r�");return;}
		try{
			Runtime.getRuntime().exec(new String[]{"kill","-USR2",pid});
		} catch (IOException e) {
			System.out.println("Erreur lors du kill -USR2 "+pid);
			e.printStackTrace();
		}
 
		System.out.println("Fin du Recorder");
	}


Mon principal soucis est que je ne recoit aucun message (pid) sur stdout de mon appli java...
Et le programme record marche parfaitement s'il n'est pas lancé.

Merci de m'aider

Modéré par zekey: Suppression de Help Wanted dans le sujet. Ce n'apporte rien a la description du sujet et de plus on demande, on ne veut pas. :-)