Interface producteur/consommateur utilisant SWING
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:
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:
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:
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.