I created gui that has uipanel with two radio buttons. I'm running two endless loops for each radio button that know to switch on from another smoothly. When I close gui window I get errors as follows:
??? Error using ==> guidata at 89 H must be the handle to a figure or figure descendent.
Error in ==> Demo>uipanel1_SelectionChangeFcn at 262
guidata(hObject, handles);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Demo at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)Demo('uipanel1_SelectionChangeFcn',get(hObject,'SelectedObject'),eventdata,guidata(get(hObject,'SelectedObject')))
Error in ==> hgfeval at 63
feval(fcn{1},varargin{:},fcn{2:end});
Error in ==> uitools.uibuttongroup.childAddedCbk>manageButtons at 80
hgfeval(cbk, source, evdata);
??? Error while evaluating uicontrol Callback
Can you suggest what is the proper way to close gui window?
Thanks,
No products are associated with this question.
A secure solution would be:
setappdata(FigureHandle, 'LoopEntered', false); setappdata(FigureHandle, 'StopLoop', false);
setappdata(FigureHandle, 'LoopEntered', true)
setappdata(FigureHandle, 'LoopEntered', false)
if getappdata(FigureHandle, 'LoopEntered')
setappdata(FigureHandle, 'StopLoop');
while getappdata(FigureHandle, 'LoopEntered')
pause(0.1);
end
end
while XYZ
if get(FigureHandle, 'StopLoop')
break;
end
...
end
setappdata(FigureHandle, 'LoopEntered', false);
Then you have two dynamic locks: The running loop locks the closing of the figure. Closing the figure blocks the execution of the loop.
Hello Jan,
does it matter if I use guide to create gui (for example, figure local data)?
does the code might change?
thanks,
Hello Jan,
I followed your suggestion with small adjustments:
1. the endless loops never stops, only switches one to other. Because of that, I left in the CloseRequestFcn and DeleteFcn used these two lines:
if getappdata(handles.figure1, 'LoopEntered') setappdata(handles.figure1, 'StopLoop', true); end
2. Once I was able to stop the endless loop, I used these two lines at the end of each endless loop:
setappdata(handles.figure1, 'LoopEntered', false); delete(handles.figure1);
to delete the window - I get no errors here.
3. Once I deleted figure1, from unknown reason the pointer returns back to the loop and tries to execute the condition that stops endless loop, attached list of errors:
??? Error using ==> getappdata
Invalid object handle Error in ==> Demo>uipanel1_SelectionChangeFcn at 266
if getappdata(handles.figure1, 'StopLoop') Error in ==> gui_mainfcn at 96
feval(varargin{:}); Error in ==> Demo at 42
gui_mainfcn(gui_State, varargin{:}); Error in ==>
@(hObject,eventdata)Demo('uipanel1_SelectionChangeFcn',get(hObject,'SelectedObject'),eventdata,guidata(get(hObject,'SelectedObject'))) Error in ==> hgfeval at 63
feval(fcn{1},varargin{:},fcn{2:end}); Error in ==> uitools.uibuttongroup.childAddedCbk>manageButtons at 80
hgfeval(cbk, source, evdata); ??? Error using ==> pause
Error while evaluating uicontrol Callback ??? Error using ==> getappdata
Invalid object handle Error in ==> Demo>uipanel1_SelectionChangeFcn at 352
if getappdata(handles.figure1, 'StopLoop') Error in ==> gui_mainfcn at 96
feval(varargin{:}); Error in ==> Demo at 42
gui_mainfcn(gui_State, varargin{:}); Error in ==>
@(hObject,eventdata)Demo('uipanel1_SelectionChangeFcn',get(hObject,'SelectedObject'),eventdata,guidata(get(hObject,'SelectedObject'))) Error in ==> hgfeval at 63
feval(fcn{1},varargin{:},fcn{2:end}); Error in ==> uitools.uibuttongroup.childAddedCbk>manageButtons at 80
hgfeval(cbk, source, evdata); ??? Error using ==> drawnow
Error while evaluating uicontrol Callback ??? Error using ==> getappdata
Invalid object handle Error in ==> Demo>uipanel1_SelectionChangeFcn at 266
if getappdata(handles.figure1, 'StopLoop') Error in ==> gui_mainfcn at 96
feval(varargin{:}); Error in ==> Demo at 42
gui_mainfcn(gui_State, varargin{:}); Error in ==>
@(hObject,eventdata)Demo('uipanel1_SelectionChangeFcn',get(hObject,'SelectedObject'),eventdata,guidata(get(hObject,'SelectedObject'))) Error in ==> hgfeval at 63
feval(fcn{1},varargin{:},fcn{2:end}); Error in ==> uitools.uibuttongroup.childAddedCbk>manageButtons at 80
hgfeval(cbk, source, evdata);??? Error while evaluating uicontrol Callback
Please advice.
Walter,
if ishandle(handles.figure1) is valid after deletion, how to force deletion?
Jan, what you say that I need to update before deleting an object?
It's a good idea to use TIMER, but I don't know to use it properly. Once I'll study this I will send some feedbacks about that.
Thank you for your help.
I finally got this the way I want it. Using flags of 'LoopEntered' and 'StopLoop' get the job done. Now I can continue to the next step of the code.
Michael
5 Comments
Direct link to this comment:
http://www.mathworks.com/matlabcentral/answers/44313#comment_91182
You cannot run two endless loops in Matlab. One endless loop fills the single Matlab thread already. Therefore please post the relevant code to explain, what you are actually doing.
It seems to be obvious, that you have to stop the loops, before the figure can be closed.
Direct link to this comment:
http://www.mathworks.com/matlabcentral/answers/44313#comment_91324
I cannot show the actual code but I'm going to show the flow:
I understand that I need to stop the loop, when I click on 'X' of the window what object or value of the object I need to check to stop the loop?
Direct link to this comment:
http://www.mathworks.com/matlabcentral/answers/44313#comment_91331
What does "while button1" mean? Can the value of "button1" be changed from inside the WHILE loop?
Direct link to this comment:
http://www.mathworks.com/matlabcentral/answers/44313#comment_91343
yes.
button1 or button2 values taken from 'uibuttongroup' panel and then passed to the loops.
Direct link to this comment:
http://www.mathworks.com/matlabcentral/answers/44313#comment_91469
Let me ask again: Do you assume, that the value of button1 or button2 is changed, during Matlab processes the infinite loop? Or in other words, is your function equivalent to:
if button1 while true ... end end