Bonjour,

Je suis nouveau ici, et également un novice en Java.
Mon problème est que j'ai à réaliser une interface graphique en Java (SWING) sur un exemple de producteur/consommateur utilisant un buffer borné à 4 places. Les producteurs produisent des lettres consommées ensuite. J'ai écris le code producteur/consommateur/bounded_buffer :

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
 
import java.util.*;
import java.awt.*;
 
class Buffer extends Vector {
	//Vector buffer = new Vector(4);
	private static final long serialVersionUID = 1L;
 
	public synchronized void put(char donnee) {
		// TODO Auto-generated method stub
		// wait while buffer full
		while(Full()) {
			try {
				System.out.println("Buffer full");
				wait();		// waiting
			}
			catch(Exception e) {}
		}
		//a free place
		add(new Character (donnee));
		notifyAll();	}	//wake up the Threads
 
	public synchronized char get() {
		// wait while buffer empty
		while(Empty()) {
			try {
				System.out.println("Buffer empty");
				wait();		// waiting
			}
			catch(Exception e) {}
		}
		notifyAll();
		return((Character)this.remove(0)).charValue();
	}
	public boolean Full() {return (size()== 3); }
	public boolean Empty() {return (size()== 0); }
}
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
58
59
 
import java.util.*;
 
class prod extends Thread {
	private Buffer buffer;
	private String donnee;
	private int id;
 
	public prod(Buffer buffer, String donnee, int id) {
		this.buffer = buffer;
		this.donnee = donnee;
		this.id = id;
	}
 
	public void run () {
		Random r = new Random();
		for(int i = 0;i<donnee.length();i++) {
			//production of the letter
			System.out.println(this.id + "produced:"+donnee.charAt(i));
			buffer.put(donnee.charAt(i));
			try {
				//random production rythm
				sleep((r.nextInt())%30);
			}
			catch(Exception e) {};
		}
		//System.out.println("\nProduction finished");
	}
 
}
 
import java.util.*;
 
class cons extends Thread{
	private Buffer buffer;
	private int nombre ;
	private int id;
 
	public cons(Buffer buffer, int nombre, int id) {
		this.buffer = buffer;
		this.nombre = nombre;
		this.id = id;
	}
 
	public void run() {
		Random r = new Random();
		for(int i = 0;i<nombre;i++) {
			//consumptiom of the letter
			char car = buffer.get();
			System.out.println(this.id + "consumed:"+car);
			try {
				//random consumption rythm
				sleep((r.nextInt())%20);
			}
			catch(Exception e) {};
		}
		//System.out.println("\nConsumptiom finished");
	}
}
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
 
public class pr_co {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String donnee = "abcdefghijkl";
		Buffer buffer = new Buffer();
		prod p1 = new prod(buffer,donnee,1);
		prod p2 = new prod(buffer,donnee,2);
		prod p3 = new prod(buffer,donnee,3);
		cons c1 = new cons(buffer,donnee.length(),1);
		cons c2 = new cons(buffer,donnee.length(),2);
		cons c3 = new cons(buffer,donnee.length(),3);
		p1.start();
		p2.start();
		p3.start();
		c1.start();
		c2.start();
		c3.start();
	}
 
}
Je sais que tout ça marche j'ai testé avec eclipse.

Maintenant, je dois faire l'interface graphique, et je ne sais pas du tout comment faire. A gauche, on doit avoir les producteurs avec leur état (produire, attendre le buffer vide...) et les lettres produites. Au milieu, on doit avoir le buffer avec les 4 places et les lettres qui s'y accumulent ou partent selon qu'elles sont produites ou consommées. Enfin, à droite, on doit avoir les consommateurs sur le même modèle que les producteurs.

Merci de votre aide, j'espère que vous aurez quelques réponses à mon problème.