Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Public int dx, dy;






 

public Ball (int Num, int X, int Y, int Dx, int Dy)// Конструктор

{

num= Num; life= false; run= false;

w= 100; h= 100; x= X; y= Y; dx= Dx; dy= Dy;

Start ();

}

 

public void Start () // Стартовать

{

if (! run)

{

run= true;

life= true;

thread= new Thread (this);

thread.start ();

}

}

//---------------

synchronized public void Suspend () // Приостановить

{

if (run)

{

run= false;

waiting=true;

}

}

//---------------

synchronized public void Resume () // Возобновить

{

if (! run)

{

run= true;

waiting=false;

notify();

}

}

//---------------

public void run () // Выполнить поток

{

int n= 0;

while ((life)) //& & (n< =2))

{

System.out.print(" object " +num);

System.out.println(" n= " +n);

n++;

x += dx; y += dy;

if (x> w || x< 0) dx= -dx;

if (y> h || y< 0) dy= -dy;

 

// Уведомить

setChanged();

notifyObservers(new Obs(num, n));

try

{

Thread.sleep (10);

synchronized(this)

{

if(waiting)

wait();

}

}

catch(InterruptedException iE){}

}

System.out.print(" object " +num);

System.out.println(" finished ");

}

}

 

//-------------------------------------

class Balls extends Frame implements Observer // Класс объектов

{

Ball [] pBall;

Color col;

public Balls ()

{

col= Color.red;

pBall= new Ball [2];

for (int i= 0; i < 2; i++)

{

pBall[i]=new Ball (i, i*3+10,

1*3+15, i*3+5, i*3+5);

 

pBall[i].addObserver(this);

}

this.setTitle(" Balls");

This.setSize(400, 300);

This.show();

Start ();

}

//---------------

public void Start () // Стартовать

{

for(int i=0; i < 2; i++)

{

pBall[i]. Start ();

}

}

//---------------

public void Suspend () // Возобновить

{

for (int i=0; i < 2; i++)

pBall[i].Suspend ();

}

//---------------

public void Resume () // Приостановить

{

for (int i= 0; i < 2; i++)

pBall[i].Resume ();

}

 

public void update (Observable r, Object ob) // Обработчик события ev

{

Obs obs= (Obs) ob;

System.out.print(" object num= " + obs.num);

System.out.println(" n= " + obs.n);

Repaint();

}

 

Public void paint (Graphics g)

{

Super.paint (g);

G.setColor(col);

for (int i= 0; i < 2; i++)

{

g.drawOval(pBall[i].x, pBall[i].y, 20, 20);

pBall[i].w= this.getSize().width;

pBall[i].h= this.getSize().height;

}

}

}

 

 

class BallsCj1

{

public static void main ()

{

Balls pBalls= new Balls (); // Создать объекты класса Balls

pBalls.Start(); //!!

System.out.println(" objects are working");

// Объекты функционируют 20 мс

try

{

Thread.sleep (20);

}

catch(InterruptedException iE){}

pBalls.Suspend (); // Приостановить объекты

System.out.println(" objects are suspend and are resumed");

pBalls.Resume (); // Возобновить выполнение объектов

// Объекты функционируют 20 мс

try

{

Thread.sleep (20);

}

catch(InterruptedException iE){}

//pBalls.Suspend (); // Приостановить объекты //!!

}

}

/*

Результат:

Появилось прикладное окно с двумя нарисованными шарами.

objects are working

object 1 n= 0

object num= 1 n= 0

object 2 n= 0

object num= 2 n= 0

object 1 n= 1

object num= 1 n= 1

object 2 n= 1

object num= 2 n= 1

objects are suspend and are resumed

object 1 n= 2

object num= 1 n= 2

object 2 n= 2

object num= 2 n= 2

object 1 n= 3

object num= 1 n= 3

object 2 n= 3

object num= 2 n= 3

*/

 

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал