Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java MVC模式中,我应该在哪里调用swingworker_Java_Swing_Model View Controller_Swingworker - Fatal编程技术网

在Java MVC模式中,我应该在哪里调用swingworker

在Java MVC模式中,我应该在哪里调用swingworker,java,swing,model-view-controller,swingworker,Java,Swing,Model View Controller,Swingworker,我有一个程序,基本上就像这个MVC示例中的程序一样: 在我的程序中,有一个过程需要花费相当多的时间,这会冻结我的GUI。我希望GUI在进程运行时不断更新。要做到这一点,我相信我需要一个SwingWorker。我不知道在我的MVC模式中我应该在哪里调用这个SwingWorker 我的想法是,我应该在控制器的MultiplyListener actionlistener中运行它。这是正确的吗 在这种情况下,模型是一种数学运算,可能通过迭代随着时间的推移而演变。显然,工人属于模型,如图所示。setPr

我有一个程序,基本上就像这个MVC示例中的程序一样:

在我的程序中,有一个过程需要花费相当多的时间,这会冻结我的GUI。我希望GUI在进程运行时不断更新。要做到这一点,我相信我需要一个SwingWorker。我不知道在我的MVC模式中我应该在哪里调用这个SwingWorker

我的想法是,我应该在控制器的MultiplyListener actionlistener中运行它。这是正确的吗

在这种情况下,模型是一种数学运算,可能通过迭代随着时间的推移而演变。显然,工人属于模型,如图所示。
setProgress()
方法将通知任何
PropertyChangeListener
,而
process()
可以通知任何其他侦听视图,如图所示

附录:在第二个示例中,工作人员更新了一个不同的模型:名为
collection
的图表数据集。反过来,图表会侦听数据集并根据更改进行自我更新

在中,控制器代表模型和视图安装操作侦听器。在这种情况下,GUI操作侦听器是其各自视图的本地对象。无论哪种情况,都是封装的合适选择。当模型的内部状态因用户发起的操作而发生变化时,模型会通知其观察者。

在这种情况下,模型是一种数学运算,可能通过迭代随时间演化。显然,工人属于模型,如图所示。
setProgress()
方法将通知任何
PropertyChangeListener
,而
process()
可以通知任何其他侦听视图,如图所示

附录:在第二个示例中,工作人员更新了一个不同的模型:名为
collection
的图表数据集。反过来,图表会侦听数据集并根据更改进行自我更新


在中,控制器代表模型和视图安装操作侦听器。在这种情况下,GUI操作侦听器是其各自视图的本地对象。无论哪种情况,都是封装的合适选择。当模型的内部状态因用户发起的操作而改变时,模型会通知其观察者。

我认为您的
SwingWorker
属于控件,我会告诉您原因。我觉得这个模型应该尽可能地不依赖视图,并且在创建时应该考虑到它可以与不同的视图和控件一起使用,如果需要的话,甚至可以与完全不同的GUI库一起使用。例如,您当前希望在Swing GUI中使用该模型,但如果以后您希望在Android应用程序中使用该模型,该怎么办?为了使它能够在尽可能少的修改下使用,大多数特定于Swing的代码(例如
SwingWorker
)应该驻留在控件或视图中


例如,请检查。

我认为您的
SwingWorker
属于控件,我会告诉您原因。我觉得这个模型应该尽可能地不依赖视图,并且在创建时应该考虑到它可以与不同的视图和控件一起使用,如果需要的话,甚至可以与完全不同的GUI库一起使用。例如,您当前希望在Swing GUI中使用该模型,但如果以后您希望在Android应用程序中使用该模型,该怎么办?为了使它能够在尽可能少的修改下使用,大多数特定于Swing的代码(例如
SwingWorker
)应该驻留在控件或视图中


例如,请查看。

afaics,该链接没有描述MVC:它缺少了模型通知更改的责任——或者我缺少了什么?@kleopatra:评论不错;我试着在下面详细说明。afaics,这个链接并没有描述MVC:它缺少了模型通知变更的责任——或者我缺少了什么?@kleopatra:评论不错;我试着在下面详细阐述一下。Swing看起来更传统,而Swing更以模型为中心。从概念上讲,我认为用户是GUI控制器,它看起来更传统,而Swing更以模型为中心。从概念上讲,我认为用户是GUI控制器,我同意模型应该尽可能不依赖视图。但是我很好奇——如果长时间运行的进程不是专门的
SwingWorker
,而是从
线程继承的,那么您是否也会提供同样的建议,使用控制器来封装该进程?我的理解是,
SwingWorker
是一个与
Swing
紧密集成的便利类。相反,如果他自己构建这样一个结构,它与 Swing 不太紧密地结合在一起,他可能会考虑把它存储在别处(模型),对吗?我同意模型应该尽可能不被视为不可知论。但是我很好奇——如果长时间运行的进程不是专门的
SwingWorker
,而是从
线程继承的,那么您是否也会提供同样的建议,使用控制器来封装该进程?我的理解是,
SwingWorker
是一个与
Swing
紧密集成的便利类。如果他自己构建这样一个结构,它与 Swing 没有特别紧密的结合,他可能会考虑把它存储在别处(模型),对吧?