Saludos.
Estoy trabajando en una animación en applets, donde implemento la sincronización con semáforos, sin embargo, por alguna razón, mis figuras no se están dibujando. ¿Alguién podría hecharle una mirada a mi código?
Aquí va el applet
import java.applet.*;
import java.awt.*;
public class Test extends Applet implements Runnable
{
private Semaforo mensaje = new Semaforo(1, "Numeros"); // último mensaje producido
private Productor productor1 = new Productor(mensaje);
private Consumidor consumidor1 = new Consumidor(mensaje);
int x_pos = 10; // x - Position des Balles
int y_pos = 100; // y - Position des Balles
int radius = 20; // Radius des Balles
int x_speed = 10; //Recurso
int appletsize_x = 300;
int appletsize_y = 300;
private Image dbImage;
private Graphics dbg;
int color = 0;
public static void main(String[] args)
{
//Consumidor consumidor2 = new Consumidor(mensaje);
//consumidor2.start();
}
public void start()
{
productor1.start();
consumidor1.start();
}
public void run()
{
while (true)
{
repaint();
}
}
/** Update - Method, implements double buffering */
public void update (Graphics g)
{
// initialize buffer
if (dbImage == null)
{
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics ();
}
// clear screen in background
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// draw elements in background
dbg.setColor (getForeground());
paint (dbg, 1);
// draw image on the screen
g.drawImage (dbImage, 0, 0, this);
}
public void paint (Graphics g, int color){
// set color
if(color == 0){
g.setColor (Color.red);
}else if(color == 1){
g.setColor (Color.blue);
}
// paint a filled colored circle
g.fillOval (10, 100, 2 * radius, 2 * radius);
}
}
////////////////////////Aquí va mis semáforos
class Semaforo{
private int recurso;
private String nombre_recurso;
public Semaforo(int recurso, String nombre_recurso){
this.recurso = recurso;
this.nombre_recurso=nombre_recurso;
}
public synchronized void P(String name){
System.out.println(name + " solicita el recurso");
recurso--;
if(recurso < 0){
try{
System.out.println(name + " esta en espera");
wait();
} catch (InterruptedException e){}
}
}
public synchronized void V(String name){
System.out.println(name + " Libero el recurso");
recurso++;
notifyAll();
}
}
////Y aquí va uno de mis procesos, que es similar al otro proceso y que quiero animar
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
// Sincronización de hilos. Hilo productor.
//
public class Productor extends Thread
{
private Semaforo mensaje = new Semaforo(1, "Numeros"); // último mensaje producido
public Productor(Semaforo c) // constructor
{
mensaje = c;
}
public void run()
{
int cont = 20;
while (cont>=0)
{
mensaje.P("Productor");
System.out.println("Productor entro a la seccion critica");
mensaje.V("Productor");
cont--;
}
}
}