Java 在线程内调用函数并发布中间结果:如何使用SwingWorker调用它?
(这个问题可能看起来很长,但请看一下“我需要做什么”,看看我的问题是什么) 我有一个使用策略和MVC模式的应用程序Java 在线程内调用函数并发布中间结果:如何使用SwingWorker调用它?,java,model-view-controller,swingworker,strategy-pattern,Java,Model View Controller,Swingworker,Strategy Pattern,(这个问题可能看起来很长,但请看一下“我需要做什么”,看看我的问题是什么) 我有一个使用策略和MVC模式的应用程序 GUI(视图)是:Main.java。它有一组文本框作为输入。还有一个按钮可以调用另一个类(Controller.java)中的函数(toStrategy()) java是MVC模式的控制器类。它有一个函数调用MainClass.java中的函数callSearchFunction()(这是使用“import”导入的另一个包(上下文)的类) 该模型是围绕包上下文的两个类(Node
- GUI(视图)是:Main.java。它有一组文本框作为输入。还有一个按钮可以调用另一个类(Controller.java)中的函数(toStrategy())
- java是MVC模式的控制器类。它有一个函数调用MainClass.java中的函数callSearchFunction()(这是使用“import”导入的另一个包(上下文)的类)
- 该模型是围绕包上下文的两个类(NodesList和Node)构建的(但这只是一个实现细节)
- 主程序包(默认程序包):
- 类Main.java(GUI-VIEW)-->调用Context.java中的函数toStrategy()
- 类Context.java(控制器)-->调用类MainClass.java(上下文包的)中的callSearchFunction()
- 辅助班
- 包上下文(包实现策略模式)
- MainClass.java包含callSearchFunction()方法,该方法实现策略模式,根据用户选择的搜索函数创建具体的策略
- Nodes.java和NodesList.java:用于MVC的状态
- 辅助班
- 每次更新节点“打开”和“关闭”时,我都必须在Main.Main中打印它们
- 当算法终止时,将返回一个ArrayList,我将打开一个新表单,用户可以在其中在结果之间导航
- search()每次有更新节点时,Open和Closed都会创建一个类PartialResult的实例(该类将包含两个ArrayList+节点,并最终包含更多变量和函数)
- 每个SearchMethodX都实现了一个接口(根据策略模式),并且也实现了java.swing.SwingWorker
- PartialResult类将使用publish()进行“发布”,结果将返回并最终显示在Main.Main中
public void SearchMethodX implements SearchInterface,SwingWorker<ArrayList<Node>,PartialResult>{
// ArrayList = return value , PartialResult = class containing partial results
ArrayList<Node> search(){
// publish partially results and returns final result
}
// other methods/variables
}
public void SearchMethodX实现SearchInterface、SwingWorker和override SwingWorker抽象方法)?
在哪里编写publish()和get()方法
2) 我应该如何“追溯”部分结果?(我的意思是:将PartialResult实例从search()方法传递到GUI,最后使用PartialResult类的getter打印结果)
当然,任何关于如何编辑Strategy/MVC/多线程Swing的建议都是可以接受的。。
我希望我的问题是清楚的
提前感谢您的任何提示。我对您的建议发表了评论,但您没有回应。你看过我给你链接的那个例子了吗?我建议你尝试“分而治之”。试着一次解决一个问题,首先让一个简单的SwingWorker工作,然后从那里开始构建它。@Jim我看到了你的评论,并根据你的评论,我继续工作。我不明白你说的“分而治之”是什么意思。我知道那是什么,但我不明白如何(以及为什么?)在这里申请以获得结果我想知道英语可能不是你的第一语言。我尊敬的是,你不仅英语学得相当好,而且还学会了编程。美好的但你需要保持对话。我所说的“分而治之”是指你需要把你的问题分解成尽可能小的部分,然后逐一解决。当你遇到一个特定的问题时,建立一个完整的代码示例,并在这里发布一个特定的问题。当你做到这一点时,你会发现人们会更好地帮助你。我在另一个问题中给出的链接会有所帮助。我的英语这么差吗?也许是因为我是意大利人,我在学西班牙语……:)然而我知道“分而治之”是如何运作的,但我不明白在这种情况下我为什么要这样做