当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实列)的更多相关文章

  1. Java中的守护线程和非守护线程(转载)

    <什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...

  2. 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal

    什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...

  3. 第21章 java线程(1)-线程初步

    java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...

  4. Java多线程系列--“JUC线程池”06之 Callable和Future

    概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...

  5. Java多线程系列--“JUC线程池”01之 线程池架构

    概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容——线程池.内容包括:线程池架构 ...

  6. Java多线程系列--“JUC线程池”02之 线程池原理(一)

    概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...

  7. Java多线程系列--“JUC线程池”03之 线程池原理(二)

    概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...

  8. JAVA基础拾遗-论线程池的线程粒度划分与深浅放置

    摘要:多线程任务处理对提高性能很有帮助,在Java中提供的线程池也方便了对多线程任务的实现.使用它很简单,而如果进行了不正确的使用,那么代码将陷入一团乱麻.因此如何正确地使用它,如以下分享,这个技能你 ...

  9. Java多线程-新特性-线程池

    Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...

随机推荐

  1. 数据库mysql中distinct关键词

    在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 例如,在学生信息表中,你想查询该学校有多少个系.例如, ...

  2. read 计时命令

    使用read命令存在潜在危险,脚本很可能会停下来一直等待脚本用户输入数据,如果无论是否输入数据脚本的必须继续执行,那么可以使用-t选项指定一个计时器.-t选项指定read命令等待输入的秒数,当计数器计 ...

  3. iOS - Swift Subscript 下标脚本

    1.Subscript 下标脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值.语法类似于实例方法和计算型属性的混合.与定义实例方法类似,定义下标脚本使用 subscri ...

  4. 使用Maven构建Web项目

    现自己在重新操作一下:(使用的是Eclipse JavaEE版 ps:eclipse-jee-indigo-SR1-win32,已经安装好了m2eclipse插件) 1.新建Maven项目 1.1 F ...

  5. spring常用的工具类

    spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类, 而不想把一个大大的spring工程给引入 ...

  6. [转载] 为 Key-Value 数据库实现 MVCC 事务

    http://mp.weixin.qq.com/s?__biz=MzA5ODM5MDU3MA==&mid=400086920&idx=1&sn=b8174184059e2886 ...

  7. Python内置函数filter, map, reduce

    filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车. 1. filter函数的功能相当 ...

  8. (七)C语言中的void 和void 指针类型

    许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: ...

  9. 5.7 C和C++的关系

  10. android模拟器中文乱码

    问题:在xml文件中设置的中文能正确输出,但是在java文件中设置的中文会在模拟器上呈现乱码 解决方案:在build.gradle文件中添加一行代码 android {compileOptions.e ...