建立有响应的用户界面

来源:互联网 发布:linux下weblogic安装 编辑:程序博客网 时间:2024/05/22 05:09

如前所述,使用线程的动机之一就是建立有响应的用户界面。尽管我们要到第 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( )


原创粉丝点击