Java 在工作线程中读取GUI对象数据

Java 在工作线程中读取GUI对象数据,java,multithreading,swing,user-interface,concurrency,Java,Multithreading,Swing,User Interface,Concurrency,我刚刚读了Java教程中关于的课程。它主要处理从工作线程上运行的方法返回到调度线程上运行的方法的中间和最终结果。我想知道另一个方向的数据流。在工作线程上运行的方法是否可以自由读取属于GUI对象的变量并调用其数据返回方法,只要它们不更改任何对象的数据 谢谢 从JTextField读取输入的值或者读取JCheckBox的状态,并使用这些结果影响在工作线程上执行的方法,怎么样 简单:JTextField和JCheckBox的状态将在Swing事件线程上读取,然后信息可能会再次通过其构造函数在Swing

我刚刚读了Java教程中关于的课程。它主要处理从工作线程上运行的方法返回到调度线程上运行的方法的中间和最终结果。我想知道另一个方向的数据流。在工作线程上运行的方法是否可以自由读取属于GUI对象的变量并调用其数据返回方法,只要它们不更改任何对象的数据

谢谢


从JTextField读取输入的值或者读取JCheckBox的状态,并使用这些结果影响在工作线程上执行的方法,怎么样

简单:JTextField和JCheckBox的状态将在Swing事件线程上读取,然后信息可能会再次通过其构造函数在Swing事件线程上传递给Worker,然后在事件线程之外执行工作


好的,我正在考虑大量的数据。因此,调用构造函数传递所有这些参数会有点笨拙/难看

然后创建一个单独的类来保存参数数据,或者使用集合,或者两者都使用。这不是特定于Swing或SwingWorker的,而是将大量数据传递给任何方法或对象的相同解决方案

也许构造器本身会从GUI元素中提取数据并存储在工作线程的变量中

我投反对票,因为它增加了代码的耦合,降低了内聚性。工作人员应该尽可能地不了解GUI,应该只专注于获取其数据,然后完成其工作。出于这个原因,我尽量在我的工作人员中使用PropertyChangeListeners


从JTextField读取输入的值或者读取JCheckBox的状态,并使用这些结果影响在工作线程上执行的方法,怎么样

简单:JTextField和JCheckBox的状态将在Swing事件线程上读取,然后信息可能会再次通过其构造函数在Swing事件线程上传递给Worker,然后在事件线程之外执行工作


好的,我正在考虑大量的数据。因此,调用构造函数传递所有这些参数会有点笨拙/难看

然后创建一个单独的类来保存参数数据,或者使用集合,或者两者都使用。这不是特定于Swing或SwingWorker的,而是将大量数据传递给任何方法或对象的相同解决方案

也许构造器本身会从GUI元素中提取数据并存储在工作线程的变量中


我投反对票,因为它增加了代码的耦合,降低了内聚性。工作人员应该尽可能地不了解GUI,应该只专注于获取其数据,然后完成其工作。因此,我尽可能多地在员工中使用PropertyChangeListeners。

您有什么想法?驱动这个问题的要求是什么?轮询GUI的东西?如果是这样的话,这似乎是一个奇怪的要求。您将有一个EDT正在更新的后台线程读取状态。没有适当的同步,这将无法正常工作。如何从JTextField读取输入的值或读取JCheckBox的状态,并使用这些结果影响在工作线程上执行的方法?@Greg Valvo:在启动工作线程之前,将文本从JTextField或JCheckBox的状态传递给工作线程?这就是模型类使用的目的。您有什么想法?驱动这个问题的要求是什么?轮询GUI的东西?如果是这样的话,这似乎是一个奇怪的要求。您将有一个EDT正在更新的后台线程读取状态。没有适当的同步,这将无法正常工作。如何从JTextField读取输入的值或读取JCheckBox的状态,并使用这些结果影响在工作线程上执行的方法?@Greg Valvo:在启动工作线程之前,将文本从JTextField或JCheckBox的状态传递给工作线程?这就是模型类使用的。好的,我考虑的是相当大的数据量。因此,调用构造函数传递所有这些参数会有点笨拙/难看。也许构造器本身会从GUI元素中提取数据,并将其存储在工作线程的变量中?好的,我考虑的是相当大的数据量。因此,调用构造函数传递所有这些参数会有点笨拙/难看。也许构造器本身会从GUI元素中提取数据并存储在工作线程的变量中?