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"); } }Je sais que tout ça marche j'ai testé avec eclipse.
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(); } }
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.
Partager