Welcome 微信登录

首页 / 软件开发 / JAVA

Swing更多的知识

Swing更多的知识

Swing更多的知识2007-05-29 yycnet.yeah.net yyc译这一节意味着唯一向我们介绍的是Swing的强大力量和我们的着手处,因此我们能注意到通过库,我们会感觉到我们的方法何等的简单。到目前为止,我们已看到的可能足够满足我们UI设计需要的一部分。不过,这里有许多有关Swing额外的情况——它有意成为一全功能的UI设计工具箱。如果我们没有发现我们所需要的,请到SUN公司的在线文件中去查找,并搜索WEB。这个方法几...
总结

总结

总结2007-05-29 yycnet.yeah.net yyc译对于AWT而言,Java 1.1到Java 1.2最大的改变就是Java中所有的库。Java 1.0版的AWT曾作为目前见过的最糟糕的一个设计被彻底地批评,并且当它允许我们在创建小巧精致的程序时,产生的GUI“在所有的平台上都同样的平庸”。它与在特殊平台上本地应用程序开发工具相比也是受到限制的,笨拙的并且也是不友好的。当Java 1.1版纳入新的事件模型和Java B...
练习

练习

练习2007-05-29 yycnet.yeah.net yyc译(1)创建一个有文字字段和三个按钮的程序片。当我们按下每个按钮时,使不同的文字显示在文字段中。(2)增加一个复选框到练习1创建的程序中,捕捉事件,并插入不同的文字到文字字段中。(3)创建一个程序片并增加所有导致action()被调用的组件,然后捕捉他们的事件并在文字字段中为每个组件显示一个特定的消息。(4)增加可以被handleEvent()方法测试事件的组件到练习3中。过载handleEv...
多线程

多线程

多线程2007-05-29 yycnet.yeah.net yyc译利用对象,可将一个程序分割成相互独立的区域。我们通常也需要将一个程序转换成多个独立运行的子任务。象这样的每个子任务都叫作一个“线程”(Thread)。编写程序时,可将每个线程都想象成独立运行,而且都有自己的专用CPU。一些基础机制实际会为我们自动分割CPU的时间。我们通常不必关心这些细节问题,所以多线程的代码编写是相当简便的。这时理解一些定义对以后的学习狠有帮助。&...
反应灵敏的用户界面

反应灵敏的用户界面

反应灵敏的用户界面2007-05-29 yycnet.yeah.net yyc译作为我们的起点,请思考一个需要执行某些CPU密集型计算的程序。由于CPU“全心全意”为那些计算服务,所以对用户的输入十分迟钝,几乎没有什么反应。在这里,我们用一个合成的applet/application(程序片/应用程序)来简单显示出一个计数器的结果://: Counter1.java// A non-responsive user interface...
从线程继承(java)

从线程继承(java)

从线程继承(java)2007-05-29 yycnet.yeah.net yyc译为创建一个线程,最简单的方法就是从Thread类继承。这个类包含了创建和运行线程所需的一切东西。Thread最重要的方法是run()。但为了使用run(),必须对其进行过载或者覆盖,使其能充分按自己的吩咐行事。因此,run()属于那些会与程序中的其他线程“并发”或“同时”执行的代码。下面这个例子可创建任意数量的线程,并通过为每...
针对用户界面的多线程

针对用户界面的多线程

针对用户界面的多线程2007-05-29 yycnet.yeah.net yyc译现在,我们也许能用一个线程解决在Counter1.java中出现的问题。采用的一个技巧便是在一个线程的run()方法中放置“子任务”——亦即位于go()内的循环。一旦用户按下Start按钮,线程就会启动,但马上结束线程的创建。这样一来,尽管线程仍在运行,但程序的主要工作却能得以继续(等候并响应用户界面的事件)。下面是具体的代码:...
用主类合并线程

用主类合并线程

用主类合并线程2007-05-29 yycnet.yeah.net yyc译在上面的例子中,我们看到线程类(Thread)与程序的主类(Main)是分隔开的。这样做非常合理,而且易于理解。然而,还有另一种方式也是经常要用到的。尽管它不十分明确,但一般都要更简洁一些(这也解释了它为什么十分流行)。通过将主程序类变成一个线程,这种形式可将主程序类与线程类合并到一起。由于对一个GUI程序来说,主程序类必须从Frame或Applet继承,所以必须用一个接口加入额外...
java制作多个线程

java制作多个线程

java制作多个线程2007-05-29 yycnet.yeah.net yyc译现在考虑一下创建多个不同的线程的问题。我们不可用前面的例子来做到这一点,所以必须倒退回去,利用从Thread继承的多个独立类来封装run()。但这是一种更常规的方案,而且更易理解,所以尽管前例揭示了我们经常都能看到的编码样式,但并不推荐在大多数情况下都那样做,因为它只是稍微复杂一些,而且灵活性稍低一些。下面这个例子用计数器和切换按钮再现了前面的编码样式。但这一次,一个特定计数...
Daemon线程

Daemon线程

Daemon线程2007-05-29 yycnet.yeah.net yyc译“Daemon”线程的作用是在程序的运行期间于后台提供一种“常规”服务,但它并不属于程序的一个基本部分。因此,一旦所有非Daemon线程完成,程序也会中止运行。相反,假若有任何非Daemon线程仍在运行(比如还有一个正在运行main()的线程),则程序的运行不会中止。通过调用isDaemon(),可调查一个线程是不是一个Daemon...
java资源访问的错误方法

java资源访问的错误方法

java资源访问的错误方法2007-05-29 yycnet.yeah.net yyc译现在考虑换成另一种方式来使用本章频繁见到的计数器。在下面的例子中,每个线程都包含了两个计数器,它们在run()里增值以及显示。除此以外,我们使用了Watcher类的另一个线程。它的作用是监视计数器,检查它们是否保持相等。这表面是一项无意义的行动,因为如果查看代码,就会发现计数器肯定是相同的。但实际情况却不一定如此。下面是程序的第一个版本://: Sharing1.jav...
Java如何共享资源

Java如何共享资源

Java如何共享资源2007-05-29 yycnet.yeah.net yyc译对一种特殊的资源——对象中的内存——Java提供了内建的机制来防止它们的冲突。由于我们通常将数据元素设为从属于private(私有)类,然后只通过方法访问那些内存,所以只需将一个特定的方法设为synchronized(同步的),便可有效地防止冲突。在任何时刻,只可有一个线程调用特定对象的一个synchronized方法(尽管那个...
回顾Java Beans

回顾Java Beans

回顾Java Beans2007-05-29 yycnet.yeah.net yyc译我们现在已理解了同步,接着可换从另一个角度来考察Java Beans。无论什么时候创建了一个Bean,就必须假定它要在一个多线程的环境中运行。这意味着:(1) 只要可行,Bean的所有公共方法都应同步。当然,这也带来了“同步”在运行期间的开销。若特别在意这个问题,在关键区域中不会造成问题的方法就可保留为“不同步”,但注意这通...
线程的状态

线程的状态

线程的状态2007-05-29 yycnet.yeah.net yyc译一个线程可以有四种状态:(1) 新(New):线程对象已经创建,但尚未启动,所以不可运行。(2) 可运行(Runnable):意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行。因此,线程可能在、也可能不在运行当中,但一旦条件许可,没有什么能阻止它的运行——它既没有“死”掉,也未被“堵塞&rdqu...
线程为何会堵塞

线程为何会堵塞

线程为何会堵塞2007-05-29 yycnet.yeah.net yyc译堵塞状态是前述四种状态中最有趣的,值得我们作进一步的探讨。线程被堵塞可能是由下述五方面的原因造成的:(1) 调用sleep(毫秒数),使线程进入“睡眠”状态。在规定的时间内,这个线程是不会运行的。(2) 用suspend()暂停了线程的执行。除非线程收到resume()消息,否则不会返回“可运行”状态。(3) 用wait()暂停了线程...
线程的优先级

线程的优先级

线程的优先级2007-05-29 yycnet.yeah.net yyc译线程的优先级(Priority)告诉调试程序该线程的重要程度有多大。如果有大量线程都被堵塞,都在等候运行,调试程序会首先运行具有最高优先级的那个线程。然而,这并不表示优先级较低的线程不会运行(换言之,不会因为存在优先级而导致死锁)。若线程的优先级较低,只不过表示它被准许运行的机会小一些而已。可用getPriority()方法读取一个线程的优先级,并用setPriority()改变它。...
java的线程组

java的线程组

java的线程组2007-05-29 yycnet.yeah.net yyc译所有线程都隶属于一个线程组。那可以是一个默认线程组,亦可是一个创建线程时明确指定的组。在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。每个应用都至少有一个线程从属于系统线程组。若创建多个线程而不指定一个组,它们就会自动归属于系统线程组。线程组也必须从属于其他线程组。必须在构建器里指定新线程组从属于哪个线程组。若在创建一个线程组的时候没有指定它的归属,则同样会自动成为...
回顾runnable

回顾runnable

回顾runnable2007-05-29 yycnet.yeah.net yyc译在本章早些时候,我曾建议大家在将一个程序片或主Frame当作Runnable的实现形式之前,一定要好好地想一想。若采用那种方式,就只能在自己的程序中使用其中的一个线程。这便限制了灵活性,一旦需要用到属于那种类型的多个线程,就会遇到不必要的麻烦。当然,如果必须从一个类继承,而且想使类具有线程处理能力,则Runnable是一种正确的方案。本章最后一个例子对这一点进行了剖析,制作了...
过多的线程

过多的线程

过多的线程2007-05-29 yycnet.yeah.net yyc译有些时候,我们会发现ColorBoxes几乎陷于停顿状态。在我自己的机器上,这一情况在产生了10×10的网格之后发生了。为什么会这样呢?自然地,我们有理由怀疑AWT对它做了什么事情。所以这里有一个例子能够测试那个猜测,它产生了较少的线程。代码经过了重新组织,使一个Vector实现了Runnable,而且那个Vector容纳了数量众多的色块,并随机挑选一些进行更新。随后,我们...
<< 21 22 23 24 25 26 27 28 29 30 >>