我目前正在开发一个带遗传算法的项目。 它工作正常,我得到了我想要的结果,所以这方面没问题。 我在控制台中显示了所有信息,因此我决定创建一个GUI来改进软件。
我有两个框架。一个是选择框,您可以在其中选择运行选项。 另一个是带有textArea的框架。第二帧的目的是显示有关其中运行的信息。对于这两个帧,我使用了MVC设计模式。它工作正常,我已经为GUI运行了一些测试,所有测试都正常显示。
现在问题在于我试图整合双方。 我在主要的第一帧发射。然后,当信息完成并且用户单击“确定”按钮时,它切换到第二帧并运行遗传算法。我对信息进行验证,并使按钮启用为false,直到它正确为止;)。 从理论上讲,假设将第二帧显示为空,然后启动GA,然后在运行MVC模型的框架中输入文本。
单击按钮时会出现问题,第二帧显示部分显示。我的意思是我有标题和红色关闭按钮的框架,但它没有任何内容。我可以用我的鼠标移动框架,但如果我点击红色关闭按钮,没有任何附加,所以我想框架有点冻结。在这段时间里,Ga跑得很好。在结束时 GA运行框架的其余部分会显示应该输入的所有信息。所以Mvc模型运作良好。它只是不能正常显示的帧。
我使用以下代码:
Vue2 vrga = new VueLorsRunGa(); //create the 2nd frame
vue1.dispose(); //destroy the first one
//code to run the GA
我没有使用GUI,所以也许我做错了所以我不会释放所需的东西。
如果按顺序进行,则应该在执行ga代码之前完全启动vue2。但我在一篇文章中读到GUI的内容是在一个特殊的线程中管理的。所以它不应该被GA冻结...... GA得到了它的特定线程,但我没有为GUI做任何事情。
因此,如果有人知道我可能出错的地方或如何设法压制我的错误,那就太好了:)
感谢您的帮助
Scyn
答案 0 :(得分:0)
您可能正在EDT线程中运行代码(例如直接来自actionPerformed方法),这会阻止正在处理的其他事件。
您应该将长时间运行的操作移出EDT线程