本文主要是介绍建立有响应的用户界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如前所述,使用线程的动机之一就是建立有响应的用户界面。尽管我们要到第 14章才接触
到图形用户界面,你在本章还是可以看到一个基于控制台用户界面的简单例子。下面的例
子有两个版本:一个在全神贯注于运算,所以不能读取控制台输入;另一个把运算放在线
程里单独运行,此时就可以在进行运算的同时监听控制台输入。
//: c13:ResponsiveUI.java
// User interface responsiveness.
import com.bruceeckel.simpletest.*;
classUnresponsiveUI {
private volatile double d = 1;
public UnresponsiveUI() throws Exception {
while(d> 0)
d= d + (Math.PI + Math.E) / d;
System.in.read(); //Never gets here
}
}
public class ResponsiveUI extends Thread {
private static Test monitor = new Test();
private static volatile double d = 1;
public ResponsiveUI() {
setDaemon(true);
start();
}
public void run() {
while(true){
d= d + (Math.PI + Math.E) / d;
}
}
public static void main(String[] args) throws
Exception {
//! new UnresponsiveUI(); // Must kill this
process
newResponsiveUI();
Thread.sleep(300);
System.in.read(); //'monitor' provides input
System.out.println(d); // Shows progress
}
} ///:~
UnresponsiveUI 在一个无限的 while循环里执行运算,显然程序不可能到达读取控制
台输入的那一行(编译器被欺骗了,相信 while 的条件使得程序能到达读取控制台输入的
那一行)。如果你把建立 UnresponsiveUI的那一行解除注释再运行程序,那么要终止它
的话,就只能杀死(kill)这个进程。
要想让程序有响应,就得把计算程序放在 run( )方法中,这样它就能让出处理器给别的程
序。当你按下回车键的时候,你可以看到计算确实在作为后台程序运行,同时还在等待用
户输入(基于测试的原因,控制台输入这一行使用 com.bruceeckel.simpletest.Test
对象自动提交给 System.in.read( )
这篇关于建立有响应的用户界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!