0

我目前正在开发一个带有遗传算法的项目。它工作正常,我得到了我想要的结果,所以这方面没有问题。我在控制台中显示了所有信息,因此我决定创建一个 GUI 来改进软件。

我有两个框架。一个是选择框架,您可以在其中选择运行选项。另一个是带有 textArea 的框架。第二帧的目的是在其中显示有关运行的信息。对于这两个框架,我都使用了 MVC 设计模式。它工作正常,我已经为 GUI 运行了一些测试,一切都正常显示。

现在的问题是当我尝试整合这两个方面时。我主要启动我的第一帧。然后它切换到第二帧并在信息完成并且用户单击“确定”按钮时运行遗传算法。我对信息进行验证,并让按钮启用为假,直到它正确为止;)。理论上,假设将第二帧显示为空,然后启动 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,所以也许我做错了,所以我没有释放需要的东西。

如果我们按顺序执行,则 vue2 应该在 ga 代码执行之前完全启动。但是我在一篇文章中读到 GUI 的东西是在一个特殊的线程中管理的。所以它不会被 GA 冻结...... GA 有它的特定线程,但我没有为 GUI 做任何事情。

因此,如果有人知道我可能错在哪里或如何设法抑制我的错误,那就太好了:)

谢谢你的帮助

斯欣

4

1 回答 1

0

您可能正在 EDT 线程中运行您的代码(例如直接从 actionPerformed 方法中),这会阻止正在处理的其他事件。

您应该将长时间运行的操作移出 EDT 线程

于 2013-09-13T09:59:01.530 回答