📄 movebutton.java
字号:
import java.awt.*;
import java.awt.event.*;
public class MoveButton extends Frame implements Runnable,ActionListener
{ Thread first,second,third;//用Thread类声明first,second两个线程对象
Button redButton,greenButton,blueButton,startButton;
int distance=10;
MoveButton()
{ first=new Thread(this);//创建first线程,当前窗口做为该线程的目标对象
second=new Thread(this);//创建first线程,当前窗口做为该线程的目标对象
third=new Thread(this);
redButton=new Button();
greenButton=new Button();
blueButton=new Button();
redButton.setBackground(Color.red);
greenButton.setBackground(Color.green);
blueButton.setBackground(Color.blue);
startButton=new Button("start");
startButton.addActionListener(this);
setLayout(null);
add(redButton);
redButton.setBounds(10,60,15,15);
add(greenButton);
greenButton.setBounds(100,60,15,15);
add(blueButton);
blueButton.setBounds(200,60,15,15);
add(startButton);
startButton.setBounds(10,100,30,30);
setBounds(0,0,300,200);
setVisible(true);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent e)
{ try{ first.start();
second.start();
third.start();
}
catch(Exception exp){}
}
public void run()
{ while(true)
{ if(Thread.currentThread()==first) //判断当前占有CPU资源的线程是否是first
{ moveComponent(redButton);
try{ Thread.sleep(20);
}
catch(Exception exp){}
}
if(Thread.currentThread()==second) //判断当前占有CPU资源的线程是否是second
{ moveComponent(greenButton);
try{ Thread.sleep(20);
}
catch(Exception exp){}
}
if(Thread.currentThread()==third)
{ moveComponent(blueButton);
try{Thread.sleep(20);
}
catch(Exception exp){}
}
}
}
public synchronized void moveComponent(Component b)
{
if(Thread.currentThread()==first)
{ while(distance>100&&distance<=200)
try{ wait();
}
catch(Exception exp){}
distance=distance+1;
b.setLocation(distance,60);
if(distance>=100)
{ b.setLocation(10,60);
notifyAll();
}
}
if(Thread.currentThread()==second)
{ while(distance>=10&&distance<100)
try{ wait();
}
catch(Exception exp){}
distance=distance+1;
b.setLocation(distance,60);
if(distance>200)
{
b.setLocation(100,60);
notifyAll();
}
}
if(Thread.currentThread()==third)
{while(distance>=10&&distance<200)
try{wait();
}
catch(Exception exp){}
distance=distance+1;
b.setLocation(distance,60);
if(distance>=300)
{
distance=10;
b.setLocation(200,60);
notifyAll();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -