当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. Java_JDK_HashMap

    (二)HashMap 需要注意的无非几点: 是什么结构,如何存储的? 如何加入元素?既然是hashMap,那么是如何计算hashcode的呢?遇到冲突又是如何解决的呢? 如何删除元素? 当容量不够时是 ...

  2. [Python]解决python链式extend的技巧

    众所周知python中的list是可以extend的,功能 旨在将两个list合并成一个.譬如[1,2,3].extend([4,5,6])=[1,2,3,4,5,6] 假如有一个list的list, ...

  3. A Star算法笔记

    回顾A*算法,偶得一源代码,略有瑕疵,改正之,并置于下. using System; using System.Collections.Generic; using System.Linq; usin ...

  4. uploads 上传图片

    public static function upFile($r,$p='../images/link/',$type='gif,jpg,png',$named=0){ $newnames = nul ...

  5. iOS - OC iOS 开发体系

    1.iOS 开发技术体系 iOS 开发技术体系图: 层级 主要框架 Cocoa Touch UIKit 等 Media Core Graphics .OpenGl ES.Core Animation ...

  6. 播放列表文件用于HTTP实时流的使用

    广告播放清单(Discontinuities): 通常你会想要提供一系列的电影,在每个电影前面显示一些品牌(广告),让用户知道这些电影来自你的特定网站.一种方法是简单地将广告与每部电影合并.但是如果你 ...

  7. 百度之星Astar2016 Round2A

    All X 等比数列求和一下 A/B MOD C = A MOD (B*C) / B  或者分治一下 Sitting in Line 状压+拓扑dp dp(i, j)表示当前二进制状态为j,当前状态的 ...

  8. python操作postgresql数据库

    import psycopg2 conn = psycopg2.connect(database=") cur = conn.cursor() cur.execute("CREAT ...

  9. Javascript设计模式之创建构造函数和方法

    构造函数和方法 var Book = function (isbn,title,author) { this.setIsbn(isbn); this.setTitle(title); this.set ...

  10. Linux crontab 定时任务

    http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html 19. crontab 定时任务 通过crontab 命令,我们 ...