Java之线程———GUI线程(包含打字游戏和计时器俩个GUI实列)
当java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue 和 AWT-Windows。
AWT-EventQuecue 线程负责处理GUI事件,AWT-EventQuecue线程负责将窗体或组件绘制到桌面。JVM保证各个线程都有使用CPU资源的机会.
样列:
package tes; import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField; /*
* 模拟一个打字游戏
* */
public class Example12_11
{
public static void main(String args [])
{
Wndow wnd= new Wndow();
wnd.setTitle("打字游戏");
wnd.setSleepTime(3000);
}
} class Wndow extends JFrame implements ActionListener ,Runnable
{
JTextField inputLetter;
JLabel showLetter,showScore;
int score;
Thread giveLetter; //生成字母
Wndow()
{
init();
setBounds(100, 100, 400, 240);
//setBackground(Color.green);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init()
{
score=0;
setLayout(new FlowLayout());
giveLetter = new Thread(this);
inputLetter = new JTextField(6);
showLetter = new JLabel(" ",JLabel.CENTER);
showLetter.setFont(new Font("Arial",Font.BOLD,22));
showScore =new JLabel("分数:");
add(new JLabel("显示字母:"));
add(showLetter);
add(new JLabel("输入字母按回车"));
add(inputLetter);
inputLetter.addActionListener(this);
add(showScore);
giveLetter.start();
} @Override
public void run() {
// TODO Auto-generated method stub
// String reg="[a-zA-Z]+"; //正则表达式
int type[]={65,97};
while(true)
{
char cc=(char)(((int)(Math.random()*100))%26+type[(int)(Math.random()*1000)%2]);
//if(reg.matches(""+cc+""))
{
showLetter.setText(""+cc+" ");
validate(); //更改容器,所以得用上
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String get = inputLetter.getText().trim(); /*trim()方法的作用为删除多余的空格*/
String show =showLetter.getText().trim();
if(get.equals(show))
{
score++;
showScore.setText(""+score+" ");
validate();
}
inputLetter.setText(null);
giveLetter.interrupt(); //吵醒休眠的线程,以便加快出字母的速度
}
void setSleepTime(long aa)
{
try {
Thread.sleep(aa);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
------->
代码:计时器
package tes; import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea; public class Example12_12 {
public static void main(String args [])
{
wndowThread wnd = new wndowThread();
wnd.setTitle("计时器");
}
} class wndowThread extends JFrame implements ActionListener,Runnable
{
Thread givetime;
JTextArea showtime;
JButton start,end;
Date showdate;
boolean flag=false,judge=true;
SimpleDateFormat myformat = new SimpleDateFormat("hh:mm:ss");
wndowThread()
{ setSize(400, 240); /*大小*/
setLocation(100, 100); /*窗口位置*/
init();
setVisible(true); /*可视*/
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init()
{
givetime = new Thread(this);
showtime = new JTextArea(10,30);
/*showtime.setLocation(10, 8);*/
start =new JButton("START");
start.setFont(new Font("Arial",Font.BOLD,22));
start.addActionListener(this);
end = new JButton("END");
end.addActionListener(this);
end.setFont(new Font("Arial",Font.BOLD,22));
setLayout(new FlowLayout());
add(start);
add(end);
add(showtime);
givetime.start();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==start)
{
//先判断线程是否结束
if(!(givetime.isAlive()))
{
givetime =new Thread(this);
flag=false;
judge=true;
}
try {
givetime.start();
} catch (Exception e1) {
// TODO Auto-generated catch block
judge=false;
showtime.setText("线程没有结束run方法之前,不要再调用start方法.");
validate();
}
}
else if(e.getSource()==end)
{
flag=true;
if(judge==false)
{
showtime.setText("");
validate();
}
}
} @Override
public void run() {
// TODO Auto-generated method stub
while(true) {
if(flag==true) return ;
showdate =new Date();
showtime.append("\n\t\t"+myformat.format(showdate));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }

Java之线程———GUI线程(包含打字游戏和计时器俩个GUI实列)的更多相关文章
- Java中的守护线程和非守护线程(转载)
		
<什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...
 - 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal
		
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...
 - 第21章  java线程(1)-线程初步
		
java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...
 - Java多线程系列--“JUC线程池”06之 Callable和Future
		
概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...
 - Java多线程系列--“JUC线程池”01之 线程池架构
		
概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容——线程池.内容包括:线程池架构 ...
 - Java多线程系列--“JUC线程池”02之 线程池原理(一)
		
概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...
 - Java多线程系列--“JUC线程池”03之 线程池原理(二)
		
概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...
 - JAVA基础拾遗-论线程池的线程粒度划分与深浅放置
		
摘要:多线程任务处理对提高性能很有帮助,在Java中提供的线程池也方便了对多线程任务的实现.使用它很简单,而如果进行了不正确的使用,那么代码将陷入一团乱麻.因此如何正确地使用它,如以下分享,这个技能你 ...
 - Java多线程-新特性-线程池
		
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...
 
随机推荐
- [翻译]观察变换View Transform (Direct3D 9)
			
这一节介绍在Direct3d中观察变换的基本概念和怎么去设置观察矩阵. 视口变换把观察者放在世界坐标系中,并把顶点转化到摄像机空间.在摄像机空间,摄像机或者说观察者在原点,观察方向为z轴正向.Dire ...
 - Socket重叠IO
			
1.为什么到现在才弄懂这个 不知道这个Socket重叠IO这种模型是不是socket IO完成端口的基础,不过我感觉,学习一下这个再去学习socket IO完成端口是比较有好处的. 这个Scoket重 ...
 - 各种操作中心Operation Center一览
			
Operation Center在中国可能有很多种名称,例如指挥中心.运维室.总控中心等等,国外可能也有很多名称,不管名称如何,任何一个上规模得数据总心或者运维单位一般都有一个这样得中心,来负责所管理 ...
 - git commit时message的问题
			
1: 在执行git commit的时候,有两种办法为该commit添加message信息一种是git commit -m 'your message'另一种是git commit会打开commit-e ...
 - CUBRID学习笔记 19  sql语句1
			
创建 欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . 过错 create table tableName (字段名 字段类型 pr ...
 - 复制选中的listbox内容
			
private void lt_log_MouseClick(object sender, MouseEventArgs e) { Clipboard.SetDataObject(lt_log.Sel ...
 - 2013 Multi-University Training Contest 8
			
HDU-4676 Sum Of Gcd 题意:给定一个1-N的全排列序列,N<=20000,有Q组询问,Q<=20000,每组询问给出左右区间[l, r],问区间内的任意两个数的gcd之和 ...
 - iOS - Swift NSCalendar		日历
			
前言 public class NSCalendar : NSObject, NSCopying, NSSecureCoding NSCalendar 对世界上现存的常用的历法进行了封装,既提供了不同 ...
 - CSS规范之BFC & IFC
			
元素是文档结构的基础,在CSS中,每个元素生成了一个包含了元素内容的框(box,也译为"盒子").但是不同的元素显示的方式会有所不同,例如<div>和<span& ...
 - openwrt: Makefile 框架分析
			
openwrt: Makefile 框架分析 原文链接:blog.chinaunix.net/uid-26675482-id-4704952.html 本篇的主要目的是想通过分析Makefile,了解 ...