2011-03-22 395 views
1

我的matlab gui使用按钮单击来启动另一个gui。如何解决Matlab递归递归递归检测hgload中的错误?

最近我发现,如果点击该按钮,我会导致matlab与递归错误崩溃(请参阅下面的说明)。 什么导致了这种递归错误,我下次如何解决它?

错误说明:

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

错误==> hgload at 56 Guard = localCheckRecursion(fullpath); %#ok

错误==> openfig at 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 at 42 gui_mainfcn(gui_State,varargin {:});

回答

1

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

你可以设计GUI控件在MATLAB使得它们通过设置'BusyAction''Interruptible'性能如下忽视快速点击这样的(其中hButtonhandle你的按钮对象):

set(hButton,'BusyAction','cancel','Interruptible','off'); 

设置'Interruptible''off'表示按钮回调在运行时不能被中断(除了某些“特殊”回调),并且设置'BusyAction''cancel'意味着当另一个回调(或其自己)正在执行时按钮点击将被忽略。

+0

谢谢!它的工作就像一个魅力。 – 2011-03-24 13:32:21

0

这通常意味着你的回调是做一些东西,让更多的事件进来,开始回调,等另一个副本...

通常的解决方法是做不到这让事件得到的东西处理。经典的是使用drawnow('expose')而不是drawnow,因为drawnow('expose')将让绘制事件得到处理,而不会让更多的按钮点击。

这听起来像你的情况的问题是,hgload是让事件通过。有几个命令(如图)可以做到这一点,并且可能很难找到解决这些问题的方法。您可以调高递归限制,但这只会推迟问题。

对不起,我没有解决方案给你。