我刚刚在Java教程中阅读了Concurrency in Swing上的课程。它几乎专门处理从工作线程上运行的方法返回到调度线程上运行的方法的临时和最终结果。我想知道另一个方向的数据流。在工作线程上运行的方法是否可以自由读取属于GUI对象的变量并调用其数据返回方法,只要它们不更改任何对象的数据?
感谢。
答案 0 :(得分:4)
如何从JTextField读取输入的值或读取JCheckBox的状态并使用这些结果来影响在工作线程上执行的方法?
简单:将在Swing事件线程上读取JTextField和JCheckBox的状态,然后信息可能会通过其构造函数(再次在Swing事件线程中)传递给Worker,然后执行的工作事件线程。
好的,我正在考虑相当多的数据。因此,对构造函数的调用将是一种尴尬/丑陋的传递所有这些参数。
然后创建一个单独的类来保存参数数据,或使用集合或两者。这不是针对Swing或SwingWorker特定的,而是针对将大量数据传递给任何方法或对象的问题的相同解决方案。
也许构造函数本身从GUI元素中提取数据并存储在工作线程的变量中?
我反对这一点,因为它增加了代码的耦合并降低了内聚力。工作人员应该尽可能地对GUI进行无知,并且应该专注于获取其数据然后进行其工作。出于这个原因,我尝试尽可能地将PropertyChangeListeners与我的工作人员一起使用。