Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame在方法运行时被完全锁定_Java_Multithreading_Jframe - Fatal编程技术网

Java JFrame在方法运行时被完全锁定

Java JFrame在方法运行时被完全锁定,java,multithreading,jframe,Java,Multithreading,Jframe,我有一个GUI(JFrame),有两个按钮和一个面板来显示结果。一个按钮用于启动算法,一个按钮用于停止算法。按start,调用一个方法并开始运行。根据输入的不同,此方法的运行时间从几秒到2-3分钟不等 我现在遇到的问题是,按下开始按钮,GUI会被完全锁定。在算法终止之前,我不能按任何按钮。如果能够停止算法,并在一定时间后将部分解决方案可视化,那将是非常棒的 我检查了帧的每一行,没有任何东西可以禁用它 //如果需要,我可以提供代码,但它相当长,只是一些提示和问题的原因将是伟大的,我试图解决它自己

我有一个GUI(JFrame),有两个按钮和一个面板来显示结果。一个按钮用于启动算法,一个按钮用于停止算法。按start,调用一个方法并开始运行。根据输入的不同,此方法的运行时间从几秒到2-3分钟不等

我现在遇到的问题是,按下开始按钮,GUI会被完全锁定。在算法终止之前,我不能按任何按钮。如果能够停止算法,并在一定时间后将部分解决方案可视化,那将是非常棒的

我检查了帧的每一行,没有任何东西可以禁用它

//如果需要,我可以提供代码,但它相当长,只是一些提示和问题的原因将是伟大的,我试图解决它自己


提前感谢。

不要将长时间运行的任务放在EDT或事件调度线程上。使用线程或SwingWorker代替。希望这足够让你开始使用谷歌关键词

听起来您的算法与UI组件运行在同一线程中。您可能希望阅读并更好地理解如何创建线程、监视执行、将这些概念与基于Swing的用户界面集成,等等。在非常高的层次上,您需要在算法启动时以某种方式生成一个新线程,并观察它的中间状态更改以更新UI。您只希望在中运行与用户界面相关的代码。

SwingWorker是一个神奇的词。在20分钟内解决了这个问题。谢谢