Bonjour,
Merci à ceux et celles qui m’aideront à résoudre le problème expliqué ci-dessous.
L'exécutable en question fait les calculs une fois que tous les paramètres sont renseignés. Par étape, une question est posée sur une invite de commande dos et l'utilisateur doit renseigner les paramètres demandés. Quand tous les paramètres sont renseignés, l'exécutable calcule pendant 4 secondes et sort un fichier résultat. Le code en java que j’ai écrit jusqu’à maintenant ne permet pas que cet exécutable arrive à faire jusqu’à la fin le calcul qu’il doit faire, il s’arrête au milieu et ne remplit pas le fichier résultat comme il faut (au lieu de sortir un/des fichiers résultats de 23Ko, je n’ai que 1Ko).
Voici comment j’ai procédé : L’objet est d’automatiser un calcul à partir d’un exécutable Fortran, sans interface graphique mais qui a besoin qu’on renseigne 8 groupes de paramètres. Pour passer d’un groupe de paramètre à un autre, il faut taper un « retour chariot ». Le premier et le dernier groupe de paramètres doivent être lus à partir d’un fichier texte « param.txt » avec plus de 200 lignes (ce qui explique le désir d’automatiser). L’executable est lancé par Runtime, le fichier « param.txt » est lu et j’utilise BufferReader puis StringTokenizer pour sélectionner le bon paramètre à renseigner sur le OutputStream du processus crée lors du lancement de l’executable. Pour synchroniser le tout, j’ai crée 9 Threads. Le premier lance l’exécutable avec Runtime et les 8 autres renseignent les groupes de paramètres (même méthode write de OutputStream, seuls les groupes de paramètres changent). En effet, il faut que les paramètres saisis sur l’OutputStream correspondent à ceux demandés par l’executable. Comme je lis le fichier paramètre «param.txt» ligne par ligne, j’ai mis un « break » dans le else du boulce if de lecture du fichier (voir code ci-dessous). Par conséquent, j’ai un java.lang.NullPointerException sur les 8 méthodes write.
Apparemment, c’est le break qui pose problème ?! Ou est-ce la synchronisation qui est mal implémentée ? J’ai essayé d’interrompre les threads dans la partie else à la place du break mais sans succès.
Voici une copie de mon main, si ça peut aider.
Merci beaucoup.

Code java : 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
public static void main(String[] args) throws InterruptedException {
		LancementPrgATaBGH p = new LancementPrgATaBGH();
		MyProcess mypr = p.new MyProcess();
		Thread runPano = p.new LanceProcess(mypr);
		Thread writePano1 = p.new writeProcess1(mypr.lance());
		Thread writePano2 = p.new writeProcess2(mypr.lance());
		Thread writePano3 = p.new writeProcess3(mypr.lance());
		Thread writePano4 = p.new writeProcess4(mypr.lance());
		Thread writePano5 = p.new writeProcess5(mypr.lance());
		Thread writePano6 = p.new writeProcess6(mypr.lance());
		Thread writePano7 = p.new writeProcess7(mypr.lance());
		Thread writePano8 = p.new writeProcess8(mypr.lance());
		try {
			BufferedReader br = new BufferedReader(new FileReader("param.txt"));
			while (true) {
				String ligneLue = br.readLine();
				System.out.println(ligneLue);
				if (ligneLue != null) {
					Process pss = mypr.lance();
					OutputStream os = pss.getOutputStream();
					BufferedWriter wr = new BufferedWriter(
							new OutputStreamWriter(os, "UTF8"));
					StringTokenizer tok = new StringTokenizer(ligneLue, "	");// tabulation
					mypr.write1(pss, wr, tok);
					mypr.write2(pss, wr, tok);
					mypr.write3(pss, wr, tok);
					mypr.write4(pss, wr, tok);
					mypr.write5(pss, wr, tok);
					mypr.write6(pss, wr, tok);
					mypr.write7(pss, wr, tok);
					mypr.write8(pss, wr, tok);
					os.flush();
				} else
 
				{
					break;
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		runPano.start();
		writePano1.start();
		writePano2.start();
		writePano3.start();
		writePano4.start();
		writePano5.start();
		writePano6.start();
		writePano7.start();
		writePano8.start();
 
	}