GUI线程
当Java程序包含图像用户界面时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程
AWT-EventQueue
//这个线程负责处理GUI事件
AWT-Window
//这个线程负责将窗体或组件绘制到桌面
当发生GUI事件是Java虚拟机就会将CPU资源切换给AWT-EventQueue,例如单击程序中的按钮触发ActionEvent事件,AWT-EventQueue线程就会立刻排队等待处理事件执行代码
带滚动条字幕的小字典
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class myDictionary extends JFrame implements ActionListener, Runnable {
JTextField jTextFieldIn;
JTextField jTextFieldOut;
JButton jButton;
Thread thread;
JLabel jLabel;
Police police;
myDictionary() {
setTitle("带字幕滚动的小词典");
setBounds(400, 400, 400, 400);
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
init();
validate();
}
public void init() {
thread = new Thread(this);
police = new Police();
jTextFieldIn = new JTextField(10);
jTextFieldIn.addActionListener(police);
add(jTextFieldIn);
jTextFieldOut = new JTextField(10);
police.setjTextField(jTextFieldOut);
add(jTextFieldOut);
jButton = new JButton("加速滚动");
jButton.addActionListener(this);
add(jButton);
jLabel = new JLabel("欢迎使用词典");
jLabel.setFont(new Font("", Font.BOLD, 24));
add(jLabel);
thread.start();
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
thread.interrupt(); //主动打断线程
}
@Override
public void run() {
while (true) {
int x = jLabel.getBounds().x;
x = x + 5;
int y = 60;
jLabel.setLocation(x, y);
if (x > 400) {
x = 10;
jLabel.setLocation(x, y);
}
try {
thread.sleep(200); //移动一次休息0.2秒
} catch (InterruptedException e) {
String str = jTextFieldIn.getText();
if (str.equals("end")) { //如果输入文本框有end就停止线程
return;
}
}
}
}
}
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Scanner;
public class Police implements ActionListener {
JTextField jTextFieldOut;
File file = new File("C:\\Users\\Administrator\\Desktop","小词典数据.txt");
HashMap<String,String> hashMap;
Scanner scanner = null;
Police(){
hashMap = new HashMap<String, String>();
try {
scanner = new Scanner(file);
while (scanner.hasNext()){
String englishWord = scanner.next();
String chineseWord = scanner.next();
hashMap.put(englishWord,chineseWord);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public void setjTextField(JTextField jTextField) {
this.jTextFieldOut = jTextField;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
String str = actionEvent.getActionCommand(); //获取点前事件源的文本
if (hashMap.containsKey(str)){
String text = hashMap.get(str);
jTextFieldOut.setText(text);
}
else{
jTextFieldOut.setText("NotFound");
}
}
}
public class Example15_8 {
public static void main(String[] args) {
myDictionary myDictionary = new myDictionary();
}
}
运行结果图
设备管理技术
设备管理技术主要包括
- 通道技术
引入通道的目的是使数据的传输独立于CPU,将CPU从烦琐的I/O工作中解脱出来。设置通道后,CPU只需向通道发出输入输出命令,通道收到命令后,从内存中取出本次输入输出要执行的通道程序加以执行,当通道完成输入输出任务后,才向CPU发出中断信号。
- DMA技术
直接内存存取(Direct Memory Access,DMA)是指数据在内存与输入输出设备之间实现直接成块传送,即在内存与输入输出设备之间传送一个数据库的过程中,只需要CPU在开始(即向设备发出“传送一块数据”的命令)与结束(CPU通过轮询或中断得知过程是否结束和下次操作是否准备就绪)时进行处理,实际操作过程由DMA硬件直接执行完成,CPU在此传送过程中可执行别的任务。
- 缓冲技术
缓冲技术(Butfer Technology)可提高外设利用率,尽可能使外设处于忙状态。缓冲技术可以采用硬件缓冲和软件缓冲。
引入缓冲的主要目的
1.缓和CPU与输入输出设备间速度不匹配的矛盾。
2.减少对CPU的中断频率,放宽对中断响应时间的限制。
3.提高CPU和输入输出设备之间的并行性。
- Spooling技术
Spooling(Simultaneous Peripheral Operation On-Line,外部设备联机并行操作)是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。这种技术实际上是用一类物理设备模拟另一类物理设备的技术,可以将低速的独占设备改造成一种可共享的设备,而且一台物理设备可以对应若干太虚拟设备同类设备/Spooling系统有"预输入程序",“缓输入程序”,“井管理程序”,“输入输出井”
CET4P197
- incentive
- hereby
- ethic
- administer
- gown