当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. 瞧,这就是UE4 C++

    1.虚幻中的类前缀你会见到U,A,F,以下就是很好的罗列其中的意义 U: UObject继承过来的,例如UTexture A: AActor继承过来的,例如AGameMode F: 其他的类和结构,例 ...

  2. [UVa1210]Sum of Consecutive Prime Numbers(前缀和,打表)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. CALayer总结(一)

    1.geometryFlipped   设置为yes,则子图层或者子视图本来相对于左上角放置 改为 相对于左下角放置: 2.contents 3.contentGravity: kCAGravityC ...

  4. SQL——存储过程实例 循环

    --循环 create or replace procedure p_xunhuan(input in number,output out number) is ); begin ; ..input ...

  5. [转]-Android Studio 快捷键整理分享-SadieYu

    文章编辑整理:Android Studio 中文组 - SadieYu Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 ...

  6. Codeforces Round #197 (Div. 2)

    A.Helpful Maths 分析:将读入的字符转化为数字,直接排个序就可以了. #include <cstdlib> #include <cstring> #include ...

  7. iOS - UIGestureRecognizer

    前言 NS_CLASS_AVAILABLE_IOS(3_2) @interface UIGestureRecognizer : NSObject @available(iOS 3.2, *) publ ...

  8. [转]ubuntu下安装程序的三种方法

    出处:http://www.cnblogs.com/xwdreamer/p/3623454.html 引言 在ubuntu当中,安装应用程序我所知道的有三种方法,分别是apt-get,dpkg安装de ...

  9. poj1755Triathlon(半平面交)

    链接 根据题意可以设三段路程分别为A,B,C 那么总时间t = A/V+B/U+C/W. 这样根据时间大小关系可以跟其余n-1个联立形成n-1个方程. 化简后为A(1/vj-1/vi)+B(1/uj- ...

  10. mysql 权限控制

    1.mysql的权限是,从某处来的用户对某对象的权限. 2.mysql的权限采用白名单策略,指定用户能做什么,没有指定的都不能做. 3.权限校验分成两个步骤: a.能不能连接,检查从哪里来,用户名和密 ...