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