带界面的消费者生产者问题JAVA代码

2026/1/19 15:35:18

import java.awt.Component; import java.awt.Container; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.Icon;

import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;

//通过本次实验,知晓两个问题:1.repaint()方法不能在主方法(主类)中使用(否则会引起背景透明问题);2.默认布局会引起组件覆盖问题。

//bug1:如果非第一次执行开始模拟按钮index值为零,程序会直接退出;

//bug2:当产品为零时,点恢复模拟,因为生产者较快。仓库第一格会没有产品. //bug3:生产速度必须大于等于生产速度;不要问我为什么,老子也很烦恼. //如果有大神解决了BUG请回传给我谢谢

public class consumerandproducer extends JFrame { private static final long serialVersionUID = 1L; public static JLabel jl5=new JLabel(); public static int index=0; Icon icon=new ImageIcon(\ public static JLabel jl6=new JLabel(\ public static JLabel jl8=new JLabel(\ public static JLabel jl7=new JLabel(\ public static JLabel jl9=new JLabel(\ public static JLabel jl10=new JLabel(\ public static JLabel jl11=new JLabel(\ public static JLabel jl12=new JLabel(\ public static JLabel jl13=new JLabel(\ public static JLabel jl14=new JLabel(\ public static JLabel jlabel; public static JLabel mark;//为生产按钮设置标记 public static JLabel mark1;//为消费按钮设置标记 testing11 test=new testing11(); testing22 test2=new testing22(); Container ff=this.getContentPane(); public consumerandproducer(String title) { super(title); ff.add(test); ff.add(test2); setBounds(200,200,900,653); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(null);

jl5.setBounds(620,40,200,200);

jl5.setBorder(BorderFactory.createEtchedBorder()); jl5.setLayout(new GridLayout(3,3)); add(jl5);

jlabel=new JLabel(\消息显示器\jlabel.setBounds(2,500,390,100);

jlabel.setBorder(BorderFactory.createEtchedBorder()); add(jlabel);

mark=new JLabel(\生产进行中\mark1=new JLabel(\消费进行中\add(mark); add(mark1);

jl6.setSize(20,20); jl7.setSize(20,20); jl8.setSize(20,20); jl9.setSize(20,20); jl10.setSize(20,20); jl11.setSize(20,20); jl12.setSize(20,20); jl13.setSize(20,20); jl14.setSize(20,20); jl5.add(jl6); jl5.add(jl7); jl5.add(jl8); jl5.add(jl9); jl5.add(jl10); jl5.add(jl11); jl5.add(jl12); jl5.add(jl13); jl5.add(jl14);

jl6.setBorder(BorderFactory.createEtchedBorder()); jl7.setBorder(BorderFactory.createEtchedBorder()); jl8.setBorder(BorderFactory.createEtchedBorder()); jl9.setBorder(BorderFactory.createEtchedBorder()); jl10.setBorder(BorderFactory.createEtchedBorder()); jl11.setBorder(BorderFactory.createEtchedBorder()); jl12.setBorder(BorderFactory.createEtchedBorder()); jl13.setBorder(BorderFactory.createEtchedBorder()); jl14.setBorder(BorderFactory.createEtchedBorder());

}

public static void main(String args[]) { consumerandproducer frame = new consumerandproducer(\模拟消费者生产者实验\ frame.setVisible(true); frame.setLayout(null); Thread3 tt=new Thread3(frame); tt.start(); }

}

//生产者线程

class testing22 extends JPanel { private static final long serialVersionUID = 1L; public static Thread1 dd1=new Thread1(); public static ImageIcon icon; public static int x=0,y=60; JLabel jl3; Image icon1; JButton jb3,jb4; public testing22() { setLayout(null); this.setBounds(38,78,320,270); icon=new ImageIcon(\ icon1=icon.getImage(); final JButton jb3=new JButton(\开始消费\ final JButton jb4=new JButton(\停止消费\ JLabel jl6 = new JLabel(\模拟消费者\ jl6.setBounds(125,5,75,30); this.add(jl6); jl6.setBorder(BorderFactory.createEtchedBorder()); this.add(jb3); this.add(jb4); jb3.setBounds(45,146,120,50); jb4.setBounds(175,146,120,50); jb4.addActionListener(new ActionListener() { @SuppressWarnings(\ public void actionPerformed(ActionEvent e) { if(e.getSource()==jb4&&e.getActionCommand().equals(\停止消费\ { dd1.suspend(); consumerandproducer.mark1.setText(\消费已停止\ } } }); jb3.addActionListener(new ActionListener() { @SuppressWarnings(\ public void actionPerformed(ActionEvent e) { if(e.getSource()==jb3&&e.getActionCommand().equals(\开始消费\ { if(consumerandproducer.index<1) { dd1.suspend(); consumerandproducer.jlabel.setText(\仓库里没有产品或已经消费完毕!\ consumerandproducer.mark1.setText(\消费进行中\

} dd1.resume(); return; } } }); } public void paint(Graphics g) {if(x>getWidth()) { x=-50; if(consumerandproducer.mark.getText()==\生产进行中\ { testing11.dd.resume(); } if(consumerandproducer.index<2) { dd1.suspend(); // testing11.dd.suspend(); } Component[] labels = consumerandproducer.jl5.getComponents (); ((JLabel)labels[--consumerandproducer.index]).setIcon (null); if(consumerandproducer.index==0) { consumerandproducer.jlabel.setText(\仓库产品已消费完毕,请生产产品或者恢复模拟!\ } if(consumerandproducer.index!=0) { consumerandproducer.jlabel.setText(\消费状态下当前仓库产品数量为:\ } } super.paint(g); g.drawImage(icon1, x, y, jl3); repaint(); } }

class Thread1 extends Thread { public void run() { while(true) { testing22.x+=10; try


带界面的消费者生产者问题JAVA代码.doc 将本文的Word文档下载到电脑
搜索更多关于: 带界面的消费者生产者问题JAVA代码 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219