我正在努力使应用程序/ gui完全关闭,如果用户单击取消或退出输入对话框。我的gui的标记名为window
但是使用close(handles.window);
会导致程序循环一次,然后(在用户点击取消或再次退出后)到达close(handles.window);
行,当然,导致无效的图形句柄错误。
是否有任何方法可以关闭应用程序而无需产生错误而不关闭整个MATLAB环境(如退出和退出)。错误()是我的临时修复,但是我不希望应用程序看起来像是崩溃了。
我试过了所有但是没有效果。值得注意的是,如果用户点击取消或退出,应用程序确实会进入if语句。
我也尝试过设置变量并在while循环之外使用close命令。
apa = getAvailableComPort();
apList = '';
i = 0;
for idx = 1:numel(apa)
if i == 0
apList = apa(idx);
else
apList = strcat(apList, ', ', apa(idx));
end
i = i + 1;
end
prompt = {'Enter COM PORT:'};
title = 'COM PORT';
num_lines = 1;
def = apList;
COM_PORT = inputdlg(prompt,title,num_lines,def);
% Keep asking for a COM PORT number until user gives a valid one
while sum(ismember(apa, COM_PORT)) == 0 % If the COM port comes up in the available COM ports at least once
% If user clicks cancel, close the guide
if isempty(COM_PORT) == 1
error('Closing...'); % HERE IS THE PROBLEM
end
prompt = {'Invalid COM PORT'};
title = 'Invalid COM PORT';
COM_PORT = inputdlg(prompt,title,num_lines,def);
end
功能getAvailableComPort
位于http://www.mathworks.com/matlabcentral/fileexchange/9251-get-available-com-port
这整段代码位于gui_OpeningFcn()函数的顶部。
答案 0 :(得分:1)
你有没有尝试在收盘后休息一下(handles.window)。中断将退出while循环,因此它不会再次击中该行。
if isempty(COM_PORT) == 1
close(handles.window)
break
end
这样,关闭窗口后while循环停止。如果你需要做更多的清理,除了关闭窗口,然后设置一个错误标志。
%Above while loop
errorFlag = False;
if isempty(COM_PORT) == 1
close(handles.window)
errorFlag = True;
break
end
%OutSide of While loop
if errorFlag
%Do some more clean-up / return / display an error or warning
end
另外,仅供参考,您不需要执行isempty(COM_PORT) == 1
... isempty(COM_PORT)
将返回true / false而不使用== 1
答案 1 :(得分:1)
您的要求并不是很清楚,但您无法保护关闭操作
if ishandle(handle.window)
close(handle.window)
end
如果窗口已被破坏,这将阻止尝试关闭。
答案 2 :(得分:0)
为什么不使用简单的return
和msgbox
来通知用户点击了取消?
if isempty(COM_PORT)
uiwait(msgbox('Process has been canceled by user.', 'Closing...', 'modal'));
delete(your_figure_handle_here);
return;
end