当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

<b>反映矫捷的用户界面</b>[Java编程]

赞助商链接



  本文“<b>反映矫捷的用户界面</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

作为我们的起点,请考虑一个需求履行某些CPU密集型计算的程序.由于CPU“诚心诚意”为那些计算服务,所以对用户的输入非常愚钝,几近没有什么反映.在这里,我们用一个合成的applet/application(程序片/利用程序)来简单显示出一个计数器的后果:

//: Counter1.java
// A non-responsive user interface
package c14;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Counter1 extends Applet {
  private int count = 0;
  private Button 
    onOff = new Button("Toggle"),
    start = new Button("Start");
  private TextField t = new TextField(10);
  private boolean runFlag = true;
  public void init() {
    add(t);
    start.addActionListener(new StartL());
    add(start);
    onOff.addActionListener(new OnOffL());
    add(onOff);
  }
  public void go() {
    while (true) {
      try {
        Thread.currentThread().sleep(100);
      } catch (InterruptedException e){}
      if(runFlag) 
        t.setText(Integer.toString(count++));
    }
  }
  class StartL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      go();
    }
  }
  class OnOffL implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      runFlag = !runFlag;
    }
  }
  public static void main(String[] args) {
    Counter1 applet = new Counter1();
    Frame aFrame = new Frame("Counter1");
    aFrame.addWindowListener(
      new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
      });
    aFrame.add(applet, BorderLayout.CENTER);
    aFrame.setSize(300,200);
    applet.init();
    applet.start();
    aFrame.setVisible(true);
  }
} ///:~
在这个程序中,AWT和程序片代码都应是大家熟习的,第13章对此已有很具体的交代.go()办法恰是程序诚心诚意服务的对待:将当前的count(计数)值置入TextField(文本字段)t,然后使count增值.
go()内的部份无限循环是调用sleep().sleep()必须同一个Thread(线程)对象关联到一同,并且仿佛每个利用程序都有部份线程同它关联(事实上,Java本身就是成立在线程底子上的,必定有一些线程会伴随我们写的利用一同运行).所以无论我们能否明确利用了线程,都可操纵Thread.currentThread()产生由程序利用的当前线程,然后为那个线程调用sleep().注意,Thread.currentThread()是Thread类的一个静态办法.
注意sleep()大概“掷”出一个InterruptException(中止违例)——固然产生这样的违例被认为是中止线程的一种“恶意”手段,并且应当尽大概地根绝这一做法.再次提醒大家,违例是为非常情形而产生的,而不是为了正常的掌握流.在这里包含了对一个“就寝”线程的中止,以支持将来的一种语言特点.
一旦按下start按钮,就会调用go().研究一下go(),你大概会很自然地(就象我一样)认为它该支持多线程,因为它会进入“就寝”状况.也就是说,固然办法本身“睡着”了,CPU仍旧应当忙于监督其他按钮“按下”事件.但有一个问题,那就是go()是永久不会返回的,因为它被计划成一个无限循环.这意味着actionPerformed()根本不会返回.由于在第一个按键今后便陷入actionPerformed()中,所以程序不能再对其他任何事件举行掌握(假如想出来,必须以某种方法“杀死”进程——最简便的方法就是在掌握台窗口按Ctrl+C键).
这里最基本的问题是go()需求持续履行自己的操作,而与此同时,它也需求返回,以便actionPerformed()可以完成,并且用户界面也能持续呼利用户的操作.但对象go()这样的传统办法来说,它却不能在持续的同时将掌握权返回给程序的其他部份.这听起来仿佛是一件不大概做到的事情,就象CPU必须同时位于两个地方一样,但线程可以办理一切.“线程模子”(以及Java中的编程支持)是一种程序编写标准,可在单独一个程序里实现几个操作的同时举行.按照这一机制,CPU可为每个线程都分配自己的一部份时间.每个线程都“感受”自己好象拥有整个CPU,但CPU的计算时间实际倒是在全部线程间分摊的.
线程机制多少降低了一些计算效率,但无论程序的计划,资源的均衡,还是用户操作的便利性,都从中得到了宏大的好处.综合考虑,这一机制是非常有代价的.当然,假如本来就安装了多块CPU,那么操作系统可以自行决意为差别的CPU分配哪些线程,程序的总体运行速度也会变得更快(全部这些都要求操作系统以及利用程序的支持).多线程和多任务是充分施展多处理机系统本领的一种最有效的方法.
  以上是“<b>反映矫捷的用户界面</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .