本文是关于如何实现SwingWorker的实例化。边肖觉得挺实用的,所以分享给大家学习。希望你看完这篇文章能有所收获。我们就不多说了。让我们和边肖一起看看。
SwingWorker示例融合SwingWorker:要使用SwingWorker类,必须首先实现它的一个子类。在子类中,您必须实现构造方法并包含您的长期操作。当实例化SwingWorker的子类时,SwingWorker会创建一个线程,但不会启动它。您必须调用SwingWorker对象的start方法来启动线程,然后start方法将调用您的construct方法。当需要构造方法返回的对象时,可以调用SwingWorker类的get方法。这是一个使用SwingWorker类的例子:
.//在main方法中:finalswingworker worker=newwinworker };worker.start.//在动作事件处理方法中:jooptions pane . showmessagedialog)
当程序的主方法调用start方法时,SwingWorker会启动一个新线程来实例化ExpensiveDialogComponent。主方法还构建了一个由窗口和按钮组成的图形用户界面。当用户单击按钮时,如果需要,程序将阻止,直到创建ExpensiveDialogComponent。然后程序显示一个包含ExpensiveDialogComponent的模式对话框。你可以在MyApplication.java找到整个过程。使用计时器类计时器类通过操作侦听器执行一次或多次操作。创建计时器时,可以指定操作执行的频率,还可以指定计时器的动作事件的侦听器。计时器启动后,将调用操作侦听器的actionPerformed方法来执行操作。计时器侦听器定义的actionPerformed方法将在事件调度线程中调用。这意味着您不必在其中使用invokeLater方法。这是一个使用Timer类实现动画循环的例子:
public class animatoraapplicationtimerextendsjframeimplementsactionlistener public voitstartanimationelse } public voitstoanimationpublic voitaction performed.}
在一个线程中执行所有用户界面代码有一些好处:组件开发人员不必对线程编程有很深的理解;像视点和支架这样的工具包中的所有组件都必须完全支持多线程访问,这使得扩展非常困难,尤其是对于不精通线程编程的开发人员来说。最近的一些工具包,比如SubArctic和IFC,都采用了类似Swing的设计。事件以可预测的顺序调度:由invokeLater排队的可运行对象从鼠标和键盘事件、计时器事件和绘图请求的同一队列中调度。在一些组件完全支持多线程访问的工具包中,变化无常的线程调度器会将组件的更改分散到事件处理过程中。这使得全面测试变得困难甚至不可能。更低的成本:试图小心地将工具包锁定在关键区域需要大量的时间和空间来管理锁。每当在工具包中调用可能在客户端代码中实现的方法时,工具包应该保存其状态并释放所有锁,以便客户端代码可以在必要时获得锁。当控件返回到工具包时,工具包必须重新获得锁并恢复状态。所有应用程序都必须承担这个代价,即使大多数应用程序不需要并发访问图形用户界面。这是SubArcticJavaToolkit对工具包中支持多线程访问问题的描述:我们的基本原则是,在设计和构建多线程应用程序时,必须格外小心,尤其是那些包含GUI组件的应用程序。线程的使用可能具有欺骗性。在许多情况下,它们可以被极度简化,使得设计“专注于单个任务的简单自治实体”成为可能。在某些情况下,它们确实简化了设计和编码。然而,在几乎所有的情况下,它们使调试、测试和维护变得困难,甚至不可能。
无论大多数程序员接受的实践,他们的经验和实践,或者我们用来帮助自己的工具,都不能用来处理不确定性。例如,当bug依赖于时间时,全面测试几乎是不可能的。特别是对于Java来说,一个程序应该运行在很多不同类型机器的操作系统平台上,每个程序都必须在抢占式和非抢占式调度下正常工作。由于这些固有的困难,我们敦促您三思是否绝对有必要使用线程。但是,在某些情况下,有必要使用线程,因此subArctic提供了线程安全的访问机制。本章讨论这种机制以及如何在独立的线程中安全地操作交互树。他们讨论的线程安全机制非常类似于SwingUtilities类提供的invokeLater和invokeAndWait方法。
以上就是如何实现SwingWorker的实例化。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业信息渠道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/157462.html