2011-03-22 408 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是讓事件通過。有幾個命令(如圖)可以做到這一點,並且可能很難找到解決這些問題的方法。您可以調高遞歸限制,但這隻會推遲問題。

對不起,我沒有解決方案給你。