我有一个GUI(JFrame),有两个按钮和一个Panel来显示结果。一个按钮用于启动算法,一个用于停止算法。按下start,会调用一个方法并开始运行。此方法的运行时间从几秒到2-3分钟不等,具体取决于输入。
我的问题是,按下开始按钮,GUI完全锁定。在算法终止之前,我无法按任何按钮。能够在一定时间后停止算法并可视化部分解决方案将会很棒。
我检查了Frame的每一行,没有任何东西可以禁用它。
//如果需要我可以提供代码,但它很长,只是一些提示和问题的原因会很好,我试着自己修复它。
提前感谢。
答案 0 :(得分:4)
不要将长时间运行的任务放在EDT或事件调度线程上。请改用线程或SwingWorker。希望这足以让你开始使用google关键字。 :)
答案 1 :(得分:3)
听起来您的算法与UI组件在同一个线程中运行。您可能希望阅读Concurrency和Concurrency in Swing以更好地了解如何创建线程,监视执行,将这些概念与基于Swing的用户界面集成,等等。在非常高的级别,您将需要以某种方式在算法启动时生成新线程并观察它以进行中间状态更改以更新UI。您只希望在event dispatch thread中运行与用户界面相关的代码。