展开全部

// 发牌程序。

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class CardBuffer //加互斥锁的缓冲区

{

private int value;

private boolean isEmpty = true; //value是否为空的信号量

private int order=0; //信号量,e68a8462616964757a686964616f31333236373165约定取牌线程的次序

synchronized void put(int i)

{

while (!isEmpty) //当value不空时,等待

{

try

{

this.wait(); //等待

}

catch(InterruptedException e) {}

}

value = i; //当value空时,value获得值

isEmpty = false; //设置value为不空状态

notifyAll(); //唤醒所有其他等待线程

}

synchronized int get(int order) //order是取牌线程约定的次序

{

while (isEmpty || (this.order!=order)) //当value空或取牌次序不符时等待

{

try

{

this.wait();

}

catch(InterruptedException e) {}

}

isEmpty = true; //设置value为空状态,并返回值

notifyAll();

this.order = (this.order+1)%4; //加1使取牌次序轮转

return value;

}

}

class Sender extends Thread //发牌线程类

{

private CardBuffer cardbuffer;

private int count;

public Sender(CardBuffer cardbuffer,int count)

{

this.cardbuffer = cardbuffer;

this.count = count;

}

public void run()

{

for (int i=1;i<=this.count;i++)

cardbuffer.put(i);

}

}

class Receiver extends Thread //取牌线程类

{

private CardBuffer cardbuffer;

private JTextArea text;

private int order; //信号量,约定取牌线程的次序

public Receiver(CardBuffer cardbuffer,JTextArea text,int order)

{

this.cardbuffer = cardbuffer ;

this.text = text ;

this.order = order;

}

public void run()

{

while(true)

{

text.append(" "+cardbuffer.get(this.order));

try

{

this.sleep(100);

}

catch(InterruptedException e) {}

}

}

}

class CardJFrame extends JFrame

{

public CardJFrame()

{

super("发牌程序");

this.setSize(430,200);

this.setLocation(300,240);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setLayout(new GridLayout(3,3,5,5)); //3行3列网格布局,间隔为5

JTextArea text_north,text_east,text_south,text_west; //获得牌的4个文本区

text_north = new JTextArea();

text_east = new JTextArea();

text_south = new JTextArea();

text_west = new JTextArea();

text_north.setLineWrap(true); //设置文本区自动换行

text_east.setLineWrap(true);

text_south.setLineWrap(true);

text_west.setLineWrap(true);

text_north.setEditable(false);

text_east.setEditable(false);

text_south.setEditable(false);

text_west.setEditable(false);

Font font = new Font("Helvetica", Font.PLAIN, 16);

text_north.setFont(font);

text_east.setFont(font);

text_south.setFont(font);

text_west.setFont(font);

this.add(new JPanel()); //网格布局的第1行

this.add(text_north);

this.add(new JPanel());

this.add(text_west); //网格布局的第2行

this.add(new JPanel());

this.add(text_east);

this.add(new JPanel()); //网格布局的第3行

this.add(text_south);

this.add(new JPanel());

this.setVisible(true);

CardBuffer cardbuffer = new CardBuffer();

Sender s = new Sender(cardbuffer,52);

s.setPriority(10); //设置最高优先级

s.start(); //启动发牌线程

(new Receiver(cardbuffer,text_north,0)).start(); //创建并启动4个取牌线程,优先级为5

(new Receiver(cardbuffer,text_east,1)).start();

(new Receiver(cardbuffer,text_south,2)).start();

(new Receiver(cardbuffer,text_west,3)).start();

}

public static void main(String arg[])

{

new CardJFrame();

}

}

本回答由提问者推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java swing 模拟发牌_用java设计一个发牌程序相关推荐

  1. 超市管理系统java swing+mysql报告_基于java+swing+mysql的超市管理系统

    运行环境:java jdk 1.8 IDE环境:Eclipse,Myeclipse,IDEA都可以 硬件环境:windows 7/8/10 2G内存以上(推荐4G,4G以上更好) 可以实现: 销售管理 ...

  2. java程序设计模拟题_《Java程序设计》东师模拟题题目及答案

    <Java程序设计>东师模拟题题目及答案 2020-08-30 09:08:37 931 有学员问关于<Java程序设计>东师模拟题题目及答案的题目的参考答案和解析,具体如下: ...

  3. java swing 注册事件_比较Java Swing中三种注册事件的方法

    Swing 是目前Java中不可缺少的窗口工具组,是建立图形化用户界面(GUI)程序的强大工具.Java Swing组件自动产生各种事件来响应用户行为.Java将事件封装成事件类,并且为每个事件类定义 ...

  4. java swing取消按钮_在Java Swing中取消选择单选按钮

    当显示一组JRadioButtons时,最初没有选择它们(除非您以编程方式强制执行).即使用户已选择按钮,我也希望能够将按钮重新置于该状态,即不应选择任何按钮. 但是,使用通常的嫌疑人无法提供所需的效 ...

  5. java swing 简单计算器_用java swing编写一个简单的计算器

    用java swing实现的一个简单的计算器:一些swing的基础应用. 注释里有详解,直接上代码: package 简易计算器; import java.awt.BorderLayout; impo ...

  6. java 12306 模拟登陆_请教java尝试模拟登录12306时遇到的一个问题

    展开全部 首先12306网站前32313133353236313431303231363533e78988e69d8331333363386133缀为"https://" 表明是用 ...

  7. java swing panel问题_关于 Java swing Box 的使用问题

    代码 import javax.swing.*; import java.awt.*; public class C5Ex1_2 { final static int WIDTH = 400; fin ...

  8. java swing 图片显示_在Java Swing中显示图像

    你有一个非常令人困惑的程序结构让你自己变得困难,我建议你简化很多事情. 首先,您当前的MinesweeperMenu类不需要扩展MinesweeperPanel,后者类也不需要扩展JFrame.然后你 ...

  9. java swing 知乎_为什么 Java Swing 默认这么丑?

    Swing好处就是你可以让它变得好看,虽然默认确实丑爆了: 其实Swing有好几个默认的LookAndFeel可以选择的,详细请自行度娘: 可以简单的把默认UI样式改成Windows系统风格的,或者系 ...

  10. 【java毕业设计】基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码)——俄罗斯方块游戏

    基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现,文章末尾 ...

最新文章

  1. JDBC学习DayTwo
  2. 深度学习中的正则化技术(附Python代码)
  3. App研发录读后总结(一)
  4. lua学习笔记之模块、包
  5. 基于Struts2的供求信息网设计(一)
  6. LiveRTMP 之RTMP直播高效推送缓冲区
  7. vue-router常见问题解决方案。(滚轴回到顶部、页面跳转同一页面报错、手机电脑端路由跳转)
  8. 本科计算机应用水平,湖南工程学院全日制非计算机专业本科生参加湖南省计算机应用水平等级考试的规定...
  9. java人民币读法转换
  10. Grid++Report——打印功能
  11. EAN13条形码生成器(C++)
  12. Unity PlayerSetting Android打包设置介绍
  13. vue-cli 开启js代码压缩和代码分割
  14. C语言报错:「error」Id returned 1 exit status
  15. 用批处理的方式压缩文件
  16. 硬盘和显卡的访问与控制
  17. chromedriver下载与安装方法
  18. 美团外卖CPS正式上线,饿了么+美团高佣联盟全都有!(外卖员多一份收入)
  19. UML之父:架构业务需求与软件开发的桥梁
  20. 安卓多线程编程系列3:使用handler和message下载网络图片

热门文章

  1. linux边看系统信息,Linux查看系统信息大全[备忘]
  2. access vba代码大全_VBA 实践指南 -- VBA连接各种数据库
  3. excel排名_Excel案例:比赛中,如何实时显示排名
  4. redis查询所有key命令_想在生产搞事情?那试试这些 Redis 命令
  5. 登录mysql时 未找到 grant命令_我在mysql数据库中可以登陆,为什么用grant命令创建用户时提示错误?...
  6. idea 设置java栈空间,如何为Intellij编译器提供更多堆空间?
  7. 两个结构体ifconf和ifreq
  8. 华北水利水电C 语言实验11,华北水利水电大学C语言实验11.doc
  9. 慕课乐学python单元测试答案_中国大学慕课第三章单元测试答案_乐学软件工程免费答案...
  10. python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...