实验目的

当Java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue和 AWT-Windows。

  • AWT-EventQuecue线程负责处理GUI事件。
  • AWT-Windows线程负责将窗体或组件绘制到桌面。

JVM要保证各个线程都有使用CPU资源的机会。

  • 例如,程序中发生GUI界面事件时,JVM就会将CPU资源切换给AWT-EventQuecue线程,AWT-EventQuecue线程就会来处理这个事件。
  • 例如,你单击了程序中的按钮﹐触发ActionEvent事件,AWT-EventQuecue线程就立刻排队等候执行处理事件的代码。

实现要求

编写一个Java应用程序,在主线程中再创建一个Frame类型的窗口,在该窗口中再创建一个线程give Word。线程give Word每隔2秒钟给出一个汉字,用户使用一种汉字输入法将该汉字输入到文本框中。

代码

本案例包含三个类

test6_4_programm

public class test6_4_programm {public static void main(String[] args) {new ThreadFrame().setTitle("汉字打字练习");}
}

WordThread

import javax.swing.*;public class WordThread extends Thread {char word;int startPosition = 19968;      //Unicode表的19968位置至32320上的汉字int endPosition = 32320;JTextField showWord;            //显示汉字的文本区域int sleepLength=6000;public void setJTextField(JTextField t){showWord=t;showWord.setEditable(false);//使此文本区域不能被编辑}public void setSleepLength(int n){sleepLength=n;}public void run(){              //线程运行int k=startPosition;while (true){word=(char) k;          //showWord.setText(""+word);//组件.setText(String str);将组件上的文字内容设置为strtry {Thread.sleep(sleepLength);//线程类调用sleep方法使线程终端sleeplength毫秒}catch (InterruptedException e){}k++;if (k>=endPosition){k=endPosition;}}}
}

ThreadFrame

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//主线程
public class ThreadFrame extends JFrame implements ActionListener {JTextField showWord;JButton button;JTextField inputText,showScore;//输入框,展示得分WordThread giveWord;//内部有一个giveword副线程JLabel ID=new JLabel();int score=0;ThreadFrame(){//设置显示文字区域的样式showWord=new JTextField(6);showWord.setFont(new Font("",Font.BOLD,72));showWord.setHorizontalAlignment(JTextField.CENTER);//设置副线程giveWord=new WordThread();giveWord.setJTextField(showWord);giveWord.setSleepLength(5000);//设置其他组件button=new JButton("开始");inputText=new JTextField(10);showScore=new JTextField(5);//设置其他组件监视器以及位置button.addActionListener(this);        inputText.addActionListener(this);add(button,BorderLayout.NORTH);    //add(showWord,BorderLayout.CENTER); //showScore.setEditable(false);//BorderLayout布局 最下方插入面板,内含三个组件:标签,输入框,展示得分JPanel southP=new JPanel();southP.add(new JLabel("输入汉字(回车):"));southP.add(inputText);southP.add(showScore);add(southP,BorderLayout.SOUTH);//设置窗口基本样式setBounds(100,100,350,180);setVisible(true);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}@Override//重写监视器public void actionPerformed(ActionEvent e) {//按钮监视器if (e.getSource()==button){if(!(giveWord.isAlive())){     //如果当前线程没开始,创建一个线程giveWord=new WordThread();giveWord.setJTextField(showWord);giveWord.setSleepLength(5000);}try{giveWord.start();}catch (Exception exe){}}//输入框监视器else if (e.getSource()==inputText){if (inputText.getText().equals(showWord.getText())){score++;         //如果输入的汉字与showWord中的内容匹配 得1分}showScore.setText("得分:"+score);inputText.setText(null);}}
}

setEditable(false)

使调用这个函数的控件不能被编辑,如果设为true或者不调用这个函数,则控件可以编辑

isAlive()

isAlive()方法: 判断当前的线程是否处于活动状态
活动状态是指线程已经启动且尚未终止,线程处于正在运行或准备开始运行的状态,就认为线程是存活的

getSource()

就是获得你目前这个事件的事件源,说通俗点,比如有一个按钮事件,你点击一个按钮,在处理事件中你用e.getSource(),就是获得这个按钮,你可以这样写

JButton a=(JButton)e.getSource();把事件源转换成你点击的那个对象类。这样你的a就可以用JButton里面的变量与方法了。
如果你有许多控件事件,这样写还可以区分你获得的是哪个控件事件的事件源。

本例是在监视器中处理事件时,产生KeyEvent e 然后通过getSource获取当前的文本框

java 线程(多线程)thread,案例:汉字打字练习(AWT-EventQuecue,AWT-Windows)相关推荐

  1. java基础-多线程应用案例展示

    java基础-多线程应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.两只熊,100只蜜蜂,蜜蜂每次生产的蜂蜜量是1,罐子的容量是30,熊在罐子的蜂蜜量达到20的时候 ...

  2. java中多线程编程案例_Java中多线程编程实战的实现线程_Java编程_Java程序员_课课家...

    java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的.尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握.要记住的一件重要的事情是 main() 函数也是 ...

  3. java多线程基础篇(二)java线程常见问题Thread Dump日志分析

    线程常见问题 CPU占用率很高,响应很慢 CPU占用率不高,但响应很慢 线程出现死锁的情况 CPU占用率不高,但响应很慢 有的时候我们会发现CPU占用率不高,系统日志也看不出问题,那么这种情况下,我们 ...

  4. java thread_Java(多线程Thread)

    毕设遇到些问题,猜想可能与多线程有关联,所以花了几天时间学习了多线程,在此小结一番 1.进程与多进程 一个进程对应一个应用程序.在java的开发环境下启动JVM,就表示启动了一个进程.在同一个操作系统 ...

  5. java线程(Thread)的创建与常用方法

    目录 Process与Thread 线程的创建 继承Thread 2. 实现Runnable 3. 实现Callable 通过线程下载图片的例子 实现Runnable接口 抢票的例子: 龟兔赛跑: 实 ...

  6. 【Java线程】Thread Runnable必知必会

    1.Java中线程的创建有两种方式: 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中; 通过实现Runnable接口,实例化Thread类; (1).继承Threa ...

  7. Java类与对象案例之打字游戏

    类与对象案例-童年回忆之打字游戏 一.玩家类 二.等级类 三.游戏类 四.等级地图 五.测试类 这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类 ...

  8. Java线程安全的案例及实现

    笔记 线程安全问题:多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题 例如下面这段代码 public class Account {private String id;pr ...

  9. Java 模拟多线程并发案例

    一.使用 CountDownLatch 模拟多线程并发(并行) CountDownLatch 介绍: countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBar ...

  10. Java 线程多线程编程2---线程同步

    来模拟一个死锁(互相等待): TestDeadLock.java package com.zhj.www;public class TestDeadLock implements Runnable { ...

最新文章

  1. 字符串的操作方法(第二天)
  2. BOOL 值在 debug 和 release 模式下初始化不一样!!!
  3. the day of python learning(考试解释)
  4. 信息学奥赛一本通(2063:【例1.4】牛吃牧草)
  5. Uzi宣布退役:身体条件不允许再继续战斗了!
  6. vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动
  7. c语言教程 萌萌哒,本人C语言小白,帮我解释每段代码的意思。谢了萌萌哒
  8. sqlplus下无法shutdown情况下不妨试试crsctl stop crs
  9. 摸索Detours 3:使用Detours 采用dll 方式进行Hook
  10. 变种水仙花数 - Lily Number
  11. html计时加速,HTML-加速、再加速(下)_html
  12. vs2013 打开失败 未能完成操作,不支持此接口
  13. 2022年第十三届蓝桥杯大赛软件类国赛 C/C++ 大学B组
  14. 促使新网站快速增加百度收录的几个不外传技巧
  15. DS18B20 单总线多器件的ROM 搜索, ALARM 检测, CRC 校验 源码实现, 基于 STM32F103
  16. 最新微信记录恢复工具MMRecovery的下载与使用方法
  17. php fpm设置时区,php设置时区的解决方案
  18. epoll检测对端关闭
  19. 【ACWing】2135. 马步距离(配数学证明)
  20. OpenCV图像处理 空间域图像增强(图像锐化 1 基于拉普拉斯算子)

热门文章

  1. CentOS7.5LNMP-PHP部署
  2. 全球10大芯片品牌的厂
  3. CATIA二次开发——自动导出BOM表
  4. CA-SSH-DHCP服务实现
  5. Qt 简易图片播放器
  6. BJDctf2020 Ezphp
  7. iOS 应用架构 (三)
  8. mysql漏洞攻击_MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法
  9. 牛客IOI周赛22-普及组
  10. 如何在c语言中播放音频