本文包括以下内容:
【程序编程相关:亚洲网通升级网络 泛亚海底光缆容量增50】 【推荐阅读:Wi-Fi手机价格偏高 销售量将会受到影】单线程规则:swing线程在同一时刻仅能被一个线程所访问.一般来说,这个线程是事件派发线程(event-dispatching thread). 【扩展信息:伦敦将成首个实现城市级WiMAX服务的英】 规则的例外:有些操作保证是线程安全的. 事件分发:如果你需要从事件处理(event-handling)或绘制代码以外的地方访问ui,那么你可以使用swingutilities类的invokelater()或invokeandwait()方法. 创建线程:如果你需要创建一个线程??比如用来处理一些耗费大量计算能力或受i/o能力限制的工作??你可以使用一个线程工具类如swingworker或timer. 为什么我们这样实现swing:我们用一些关于swing的线程安全的背景资料来结束这篇文章.swing的规则是:
一旦swing组件被具现化(realized),所有可能影响或依赖于组件状态的代码都应该在事件派发线程中执行. 这个规则可能听起来有点吓人,但对许多简单的程序来说,你用不着为线程问题操心.在我们深入如何撰写swing代码之前,让我们先来定义两个术语:具现化(realized)与事件派发线程(event-dispatching thread). 具现化的意思是组建的paint()方法已经或可能会被调用.一个作为顶级窗口的swing组件当调用以下方法时将被具现化:setvisible(true).show()或(可能令你惊奇)pack().当一个窗口被具现化,它包含的所有组件都被具现化.另一个具现化一个组件的方法是将它放入到一个已经具现化的容器中.稍后你会看到一些对组件具现化的例子. 事件派发线程是执行绘制与事件处理的线程.例如,paint()与actionperformed()方法会自动在事件派发线程中执行.另一个将代码放到事件派发线程中执行的方法是使用swingutilities类的invokelater()方法. 所有可能影响一个已具现化的swing组件的代码都必须在事件派发线程中执行.但这个规则有一些例外: 有些方法是线程安全的:在swing api的文档中,线程安全的方法用以下文字标记: this method is thread safe, although most swing methods are not. (这个方法是线程安全的,尽管大多数swing方法都不是.) 一个应用程序的gui常常可以在主线程中构建与显示:下面的典型代码是安全的,只要没有(swing或其他)组件被具现化: ... 下一页