Исходные тексты аплета Rectangles

Оглавление

Многопоточность
Процессы, потоки и приоритеты
Многопоточность в Java
Многопоточность и анимация
Синхронизация потоков
Потоки-демоны
Аплет Rectangles
Исходные тексты
Описание текстов

Назад Вперед

Исходные тексты аплета Rectangles приведены в листинге 1.

Листинг 1. Файл Rectangles,java

import java.applet.*;

import java.awt.*;
public class Rectangles extends Applet

{

  DrawRectangles m_DrawRectThread = null;

  DrawEllipse m_DrawEllipseThread = null;

  NotifyTask m_NotifyTaskThread = null
  public String getAppletInfo()

  {

    return "Name: Rectangles";

  }
  public void paint(Graphics g)

  {

    Dimension dimAppWndDimension = getSize();
    g.setColor(Color.yellow);

    g.fillRect(0, 0, 

      dimAppWndDimension.width  - 1, 

      dimAppWndDimension.height - 1);
    g.setColor(Color.black);

    g.drawRect(0, 0, 

      dimAppWndDimension.width  - 1, 

      dimAppWndDimension.height - 1);

  }
  public void start()

  {

    if (m_DrawRectThread == null)

    {

      m_DrawRectThread = 

        new DrawRectangles(this);

      m_DrawRectThread.start();

    }
    if (m_DrawEllipseThread == null)

    {

      m_DrawEllipseThread = 

        new DrawEllipse(this);

      m_DrawEllipseThread.start();

    }
    if (m_NotifyTaskThread == null)

    {

      m_NotifyTaskThread = 

        new NotifyTask(m_DrawEllipseThread);

      m_NotifyTaskThread.start();

    }

  }



  public void stop()

  {

    if (m_DrawRectThread != null)

    {

      m_DrawRectThread.stop();

      m_DrawRectThread = null;

    }
    if (m_DrawEllipseThread == null)

    {

      m_DrawEllipseThread.stop();

      m_DrawEllipseThread = null;

    }    
    if (m_NotifyTaskThread != null)

    {

      m_NotifyTaskThread.stop();

      m_NotifyTaskThread = null;

    }

  }

}
class DrawRectangles extends Thread

{

  Graphics g;

  Dimension dimAppWndDimension;
  public DrawRectangles(Applet Appl)

  {

    g = Appl.getGraphics();

    dimAppWndDimension = Appl.getSize();

  }
  public void run()

  {

    while (true)

    {

      int x, y, width, height;

      int rColor, gColor, bColor;      
      x =      (int)(dimAppWndDimension.width 

            * Math.random());

      y =      (int)(dimAppWndDimension.height

            * Math.random());

      width  = (int)(dimAppWndDimension.width

            * Math.random()) / 2;

      height = (int)(dimAppWndDimension.height

            * Math.random()) / 2;      
      rColor = (int)(255 * Math.random());

      gColor = (int)(255 * Math.random());

      bColor = (int)(255 * Math.random());
      g.setColor(new Color(rColor, 

        gColor, bColor));

      g.fillRect(x, y, width, height);
      try

      {

	Thread.sleep(50);

      }

      catch (InterruptedException e)

      {

	stop();

      }

    }

  }

}
class DrawEllipse extends Thread

{

  Graphics g;

  Dimension dimAppWndDimension;
  public DrawEllipse(Applet Appl)

  {

    g = Appl.getGraphics();

    dimAppWndDimension = Appl.getSize();

  }
  public synchronized void run()

  {

    while (true)

    {

      int x, y, width, height;

      int rColor, gColor, bColor;
      x =      (int)(dimAppWndDimension.width

          * Math.random());

      y =      (int)(dimAppWndDimension.height

          * Math.random());

      width  = (int)(dimAppWndDimension.width

          * Math.random()) / 2;

      height = (int)(dimAppWndDimension.height

          * Math.random()) / 2;
      rColor = (int)(255 * Math.random());

      gColor = (int)(255 * Math.random());

      bColor = (int)(255 * Math.random());
      g.setColor(new Color(rColor,

         gColor, bColor));

      g.fillOval(x, y, width, height);
      try

      {

	this.wait();

      }

      catch (InterruptedException e)

      {

      }

    }

  }

}
class NotifyTask extends Thread

{

  Thread STask;
  public NotifyTask(Thread SynchroTask)

  {

    STask = SynchroTask;

  }
  public void run()

  {

    while (true)

    {

      try

      {

	Thread.sleep(30);

      }

      catch (InterruptedException e)

      {

      }
      synchronized(STask)

      {

        STask.notify();

      }

    }

  }

}
Назад Вперед
Используются технологии uCoz