java swing 模拟发牌_用java设计一个发牌程序

展开全部

// 发牌程序。

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();

}

}

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python一节课多久_第一节课 python简介

标签&#xff1a;一、python特性概要1. Python是解释性语言。我们和c比较一下。2. Python特性总结&#xff1a;字节码、动态、缩进2.1 字节码2.2 动态语义 在赋值时确定数据类型2.3 缩进3. Python之禅解释性语言的内部机制&#xff0c;在运行脚本之前&#xff0c;得到结果之后&…

aspose转pdf横版_aspose实现Office转Pdf

标签&#xff1a;aspose实现Office转Pdf关键代码&#xff1a;jar包&#xff1a;aspose-words-14.6.0.jaraspose-cells-10.8.jaraspose.slides-14.4.0.jaraspose-diagram-2.1.0.jarprotected void realTransform(InputStream in, OutputStream out) throws IOException{String l…

java -jar 内存溢出_JAVA系统启动栈内存溢出-StackOverflowError

JAVA系统启动栈内存溢出-StackOverflowError线上服务器启动报错日志如下&#xff1a;Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [] due to a StackOverflowError. Possible root causes include a too lo…

java培训就是害人的_[Java教程]粗心害死人啊,我的天。

[Java教程]粗心害死人啊&#xff0c;我的天。02016-08-16 22:00:551 (上述代码是改过后正确的)今天在用ajax的时候&#xff01;出现了愚蠢的错误&#xff01;由于括号太多加上自己又粗心了&#xff01;把最后的第68行的发送请求写到了第63行的大括号里变了~&#xff01;导致我找…

Java写文件导致io过高_161108、Java IO流读写文件的几个注意点

平时写IO相关代码机会挺少的&#xff0c;但却都知道使用BufferedXXXX来读写效率高&#xff0c;没想到里面还有这么多陷阱&#xff0c;这两天突然被其中一个陷阱折腾一下&#xff1a;读一个文件&#xff0c;然后写到另外一个文件&#xff0c;前后两个文件居然不一样&#xff1f;…

java see 方法_Java 反射常用方法

类名用途Class类代表类的实体&#xff0c;在运行的Java应用程序中表示类和接口Field类代表类的成员变量(成员变量也称为类的属性)Method类代表类的方法Constructor类代表类的构造方法Class类Class代表类的实体&#xff0c;在运行的Java应用程序中表示类和接口。在这个类中提供了…

java接口测试框架搭建_接口自动化测试框架搭建

一、原理及特点参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理&#xff0c;使用了TestNG参数化测试&#xff0c;通过xml文件来执行case。测试报告这里用到第三方的包ReportNG 项目组织用Maven二、准备使用工具&#xff1a;ecl…

java 树状数据算法_使用递归算法结合数据库解析成Java树形结构的代码解析

这篇文章主要介绍了使用递归算法结合数据库解析成Java树形结构的代码解析的相关资料,需要的朋友可以参考下1、准备表结构及对应的表数据a、表结构&#xff1a;create table TB_TREE(CID NUMBER not null,CNAME VARCHAR2(50),PID NUMBER //父节点)b、表数据&#xff1a;insert i…

java工厂模式 uml_深入浅出设计模式-简单工厂模式

模式定义简单工厂模式是属于创建型模式&#xff0c;又叫做静态工厂方法(Static Factory Method)模式&#xff0c;但不属于23种GOF设计模式之一。简单工厂模式定义了一个创建对象的类&#xff0c;由这个类来封装实例化对象的行为。设计原则遵循的原则&#xff1a;依赖倒置原则迪…

java技术难点_Java核心技术第四章----对象与类重难点总结

一、类之间的关系类和类之间的关系&#xff0c;耦合度从高到低&#xff1a;is -a。继承、实现has-a。组合、聚合、关联user-a。依赖。要求是&#xff1a;高内聚、低耦合。继承(“is-a”)继承(Inheritance)&#xff0c;即“is-a”关系&#xff0c;是一种用于表示特殊与一般关系的…

java日志级别的作用_Java系统日志级别对性能的影响性

先介绍下java系统的日志日志框架&#xff1a;是一种日志接口&#xff0c;不负责具体的日志输出形式(有点类似于JDBC)&#xff0c;可以灵活的切换日志输出形式。常见的日志框架有slf4j、jcl&#xff0c;只提供Logger、LoggerFactory等接口日志系统&#xff1a;是应用实际使用的日…

java用链表做学生系统_C语言链表实现学生管理系统

本文实例为大家分享了C语言链表实现学生管理系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下#include#include#include#include#include#includeusing namespace std;typedef struct ndoe{char id[10];char name[10];char sex[3];char num[10];struct node *nex…

llinux mysql_linux下安装mysql

环境:OS:Linux As 5mysql:5.61.下载跟OS相应的版本[rootnode2 soft]# uname -aLinux node2 2.6.18-274.el5 #1 SMP Fri Jul 8 17:36:59 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux我这里是64位的linux,所有相应的下载64位的mysqlMySQL-5.6.19-1.rhel5.x86_64.rpm-bundle.tar2.解…

java中将字符串顺序反传转_如何在Java中将字符串序列化的Erlang术语反序列化为JInterface对象?...

我的接口系统提供了来自Erlang世界的结果&#xff0c;该结果发送了erlang术语的字符串表示形式&#xff0c;例如元组列表&#xff1a;[ {"key1" , ["AAA","BBB"] } , {"key2" , ["CCC","DDD"] } ]在Java中收到此字…

mysql archieve_mysql的archive储存引擎

archive储存引擎的应用场景就是它的名字的缩影&#xff0c;主要用于归档。archive储存引擎仅支持select和insert&#xff0c;最出众的是插入快&#xff0c;查询快&#xff0c;占用空间小。例如我们有大量的历史数据极少访问又不能删除&#xff0c;需要保存&#xff0c;那么它是…

java bip-39_Java中对XML的解析详解

先简单说下前三种方式&#xff1a;DOM方式&#xff1a;个人理解类似.net的XmlDocument&#xff0c;解析的时候效率不高&#xff0c;占用内存&#xff0c;不适合大XML的解析&#xff1b;SAX方式&#xff1a;基于事件的解析&#xff0c;当解析到xml的某个部分的时候&#xff0c;会…

mysql 全文本检索的列_Mysql 全文本检索

mysql 全文索引注意 并非所有的引擎都支持 全文检索mysql最常用的引擎 INnodb 和 myisam 后者支持全文检索 前者不支持创建表的时候指定要检索列 CREATE TABLE TEST_FULLTEXT(note_id int not null auto_increment,note_text text null, primaty key(note_id),FULLTEXT(note_te…

app+java_‎App Store 上的“Java大全”

*****Java程序员的给力推荐-Java大全&#xff1b;-----涵盖了java程序员入门、高级开发、编程题等内容&#xff1b;-----十分适合java入门、java开发、java面试人士参考使用。***内容目录&#xff1a;Java教程1.Java快速入门2.Java JDK安装和配置3.Java基本语法4.Java对象和类5…

128位java_Java:如何使用CFB和无填充实现128位AES

有人能给我带来这个问题吗&#xff1f;我需要知道如何使用AES加密和解密&#xff0c;至少使用128位CFB和无填充。一些代码或链接将非常赞赏。 (我已经看过谷歌&#xff0c;但没有幸运的艰难)。更新&#xff1a;工作正常&#xff01;public byte[] crypt() {byte[] crypt null;…

java的md5盐值加密_MD5盐值加密

import java.security.MessageDigest;import java.util.Random;import org.apache.commons.codec.binary.Hex;public class PasswordUtil {/*** 生成含有随机盐的密码*/public static String generate(String password) {Random r new Random();StringBuilder sb new StringB…