java - 我应该使用什么类来扩展 SwingWorker?

标签 java multithreading swing swingworker

我有一个 Java Swing 应用程序。我想将信息上传到 Web 端点,并且该过程将需要足够的时间来证明将工作转移到另一个线程上是合理的。我想使用 Swing SwingWorker 范例来做到这一点。我很困惑应该在哪里扩展 SwingWorker。

现在,每个 Web 端点都有一个类,该类存储发往该端点的所有数据,以及与端点交互所需的代码(位于名为 upload() 的方法下)。这些类是否应该实现 SwingWorker,因为它需要执行其任务的所有数据都在那里?或者我应该有一个辅助类 FooWorker 实现 SwingWorker,它将从内部 Site 对象调用 Upload() ?

如果我创建一个辅助 FooWorker 类,那么似乎我必须费点功夫将对 Site 的引用填充到我实例化的每个 FooWorker 对象中(每个 Web 端点一个线程/工作线程),但是 Site不会被一堆 SwingWorker 方法和代码污染。

如果我使用 Site 类扩展 SwingWorker,那么我可以直接从每个 Site 的 EDT 调用 .execute() ,这对我来说比为每个站点创建一个工作程序,然后让该工作程序调用要干净得多upload() 离开网站。

只是寻找关于哪种方法更好的意见和想法。 Site 类已经相当复杂,如果我扩展 SwingWorker 类,我担心会在其中放入一堆与域无关的内容。但是 FooWorker 类,如果我走这条路,基本上只是 Site 类的一个薄包装。该包装器值得让 Site 类仅关注其自己的域方法/数据吗?

最佳答案

在有意义的地方引入抽象总是一个好主意。在这种情况下,我认为这是有道理的,因为您最终可能会创建多个 SwingWorker 类。

您可以考虑创建一个名为 SiteWorker 的 SwingWorker 类。然后,我将创建实现 upload() 方法的 Site 接口(interface)。表示与站点端点的连接的每个类都将实现此 Site 接口(interface)。然后,您可以简单地让 SiteWorker 处理 Site 接口(interface),而不必处理实现 SwingWorker 的所有不同类型的 Site 类。

记住,针对接口(interface)而不是实现进行编程。如果您只需创建一个 SiteWorker,然后专注于各种站点实现,那么您的生活会更轻松。

因此,您可以将 Site 实例(可以是任何实现 Site 的类)作为参数传递给 SiteWorker 类,然后该类在其 doInBackground() 方法中只需调用实现 Site 的实例的 upload() 方法.

关于java - 我应该使用什么类来扩展 SwingWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856046/

相关文章:

java - 如何循环回到程序开头

java - 从菜单转发操作到父类

Java:字符串数组;尝试将字符串作为代码执行

c# - 无锁线程安全

.net - 当我的代码没有出现在堆栈中时,如何调试此错误?

java - 删除 JComboBox 中的向下箭头

java - 在 Java 中访问内部类的包含类

java - 重新加载数据的问题

java - 在 Selenium 中测试 GWT SimplePager ImageButton 启用状态

python - 为什么本地启动的线程不会在每次迭代结束时终止?