(3)MyFrame.java清单 package 先来先服务;
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image;
import java.awt.Transparency;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.LinkedList; import java.util.Queue; import java.util.Random; import java.util.Stack;
import javax.swing.JButton; import javax.swing.JFrame;
import javax.swing.JInternalFrame;
public class MyFrame extends JFrame {
private JButton btnStart=new JButton(\开始\ private JButton btnClose=new JButton(\关闭\ private JButton btnReset=new JButton(\重置\ private JButton btnStop=new JButton(\暂停\ private JButton btnContinue=new JButton(\继续\
// public int moveX1=0,moveX2=0,moveX3=0;//分别表示小球圆心的横坐标 public int speed1,speed2,speed3,speed4;//分别设置三个小球的速度
public int []moveX=new int[4]; public int []speed=new int[4];
public int x;
public int finishnum=0; public int []num={0,0,0,0};
public Queue
public Queue
MoveThread t=new MoveThread(0,this); MoveThread t1=new MoveThread(1,this);
MoveThread t2=new MoveThread(2,this); //创建三个线程,分别控制三个小球
MoveThread t3=new MoveThread(3, this);
private Image offScreenImg;//创建图像对象 private Graphics offScreenG;//创建画板对象
Random random=new Random(); public MyFrame(String title) {
super(title);
setSize(1000,600); setLocation(50,50);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
speed1=(random.nextInt(5)+1); do{
speed2=(random.nextInt(5)+1); }while(speed1==speed2); do{
speed3=(random.nextInt(5)+1);
}while(speed3==speed1||speed2==speed3); do {
speed4=(random.nextInt(5)+1);
}while(speed4==speed1||speed4==speed2||speed4==speed3);
speed[0]=speed1; speed[1]=speed2; speed[2]=speed3; speed[3]=speed4;
getContentPane().setLayout(null);
btnStart.setBounds(300,500,80,40); getContentPane().add(btnStart); btnStart.setVisible(true);
btnClose.setBounds(400,500,80,40); getContentPane().add(btnClose); btnClose.setVisible(true);
btnReset.setBounds(500,500,80,40); getContentPane().add(btnReset);
btnReset.setVisible(true);
btnStart.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub try {
t.start(); t1.start(); t2.start(); t3.start();
} catch (Exception e) {
// TODO: handle exception } } });
btnClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub System.exit(0);//退出程序 } });
btnReset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub moveX[0]=0; moveX[1]=0; moveX[2]=0; moveX[3]=0; finishnum=0;
num[0]=num[1]=num[2]=num[3]=0; while (runQueue.size()!=0) { runQueue.remove(); }
while(waitQueue.size()!=0) {
waitQueue.remove();
} } }); }
public void paint(Graphics g) {
offScreenImg=this.createImage(1000,500); offScreenG=offScreenImg.getGraphics();
//绘制就绪队列矩形
offScreenG.setColor(Color.yellow); offScreenG.fillRect(500, 50,80, 450); offScreenG.setColor(Color.gray);
offScreenG.setFont(new Font(\楷体\ offScreenG.drawString(\就绪队列\
//绘制CPU矩形
offScreenG.setColor(Color.cyan);
offScreenG.fillRect(580, 50,200, 450); offScreenG.setColor(Color.gray);
offScreenG.setFont(new Font(\楷体\ offScreenG.drawString(\
offScreenG.setColor(Color.black);
Font font=new Font(\楷体\ offScreenG.setFont(font);
offScreenG.drawString(\ 刘克 软件二班\
//绘制四个小球
offScreenG.setColor(Color.blue);
offScreenG.fillOval(10+moveX[0], 100, 80, 80); offScreenG.setColor(Color.red);
offScreenG.fillOval(10+moveX[1], 200, 80, 80); offScreenG.setColor(Color.green);
offScreenG.fillOval(10+moveX[2], 300, 80, 80); offScreenG.setColor(Color.gray);
offScreenG.fillOval(10+moveX[3], 400, 80, 80);
btnStart.repaint(); btnClose.repaint(); btnReset.repaint();
g.drawImage(offScreenImg,0,0,this);//输出图像
20, 70); }
public void move(int i)//i为小球编号,n为移动速度 {
if(finishnum==3&&moveX[i]<770) {moveX[i]++;} else {
if(moveX[i]<490) {
moveX[i]+=speed[i]; }
else if(runQueue.size()==0) {
runQueue.offer(i);//把i压入队列 }
else if ((x=runQueue.peek())==i&&moveX[i]<770)//如果运行队列中的元素就是它自己,继续行进 {
moveX[i]++; }
else if(num[i]==0) {
waitQueue.offer(i);//如果不是它自己则进入就绪队列 num[i]++;//保障只进一次队 }
if(moveX[i]==770) {
moveX[i]++; finishnum++;
if(runQueue.size()!=0)
runQueue.remove();//到达终点之后则出运行队列
if(waitQueue.size()!=0)//如果就绪队列之中有值,则出队 {
runQueue.offer(waitQueue.poll()); } } } } }
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库先来先服务问题java程序设计报告(3)在线全文阅读。
相关推荐: