查看单个帖子
旧 2019-12-14, 20:46   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何解决hgload中的Matlab递归RecursionDetected错误?

我的Matlab GUI使用按钮单击来启动另一个GUI。

最近,我发现如果过分单击该按钮,则会导致Matlab崩溃并出现递归错误(请参见下面的说明)。是什么导致此递归错误,下一次如何解决?

错误说明:

???在155使用==> hgload> localCheckRecursion时出错在加载c:\ Algo \ MyGUI.fig时发生递归。

==> hgload在56 Guard时出错= localCheckRecursion(fullpath); %#好

==> openfig在72时出错[fig,savedvisible] = hgload(filename,struct('Visible','off'));

在==> gui_mainfcn> local_openfig中出现错误286 gui_hFigure = openfig(name,singleton,visible);

==> gui_mainfcn错误159 gui_hFigure = local_openfig(gui_State.gui_Name,gui_SingletonOpt,gui_Visible);

==> PumpControl在42 gui_mainfcn(gui_State,varargin {:})时出错;



回答:

重复单击GUI按钮可能导致多次调用按钮回调,这可能在某些时候相互中断并导致不必要的混乱。这可能是您遇到的问题。

您可以在MATLAB中设计GUI控件,以使其通过设置如下的'BusyAction''Interruptible'属性(其中hButton是按钮对象的句柄)来忽略快速单击,例如:

set(hButton,'BusyAction','cancel','Interruptible','off'); 将'Interruptible'设置为'off'意味着按钮回调在运行时不会被中断(某些“特殊”回调除外),而将'BusyAction'设置为'cancel'意味着在以下情况下将忽略按钮单击另一个回调(或它自己的)已经在执行。



更多&回答...
poster 当前离线   回复时引用此帖