在不使用 error() 的情况下以编程方式关闭 MATLAB GUI 应用程序
Closing MATLAB GUI application programmatically without using error()
我正在努力使 application/gui 在用户单击取消或退出输入对话框时完全关闭。我的 gui 的标签称为 window
但是使用 close(handles.window);
会导致程序循环一次然后(在用户单击取消或再次退出后)到达 close(handles.window);
行,当然, 导致无效图形句柄错误。
有没有什么方法可以在不产生错误且不关闭整个 MATLAB 环境的情况下关闭应用程序(如 quit 和 exit)。 error() 是我的临时修复程序,但我不希望应用程序看起来像是崩溃了。
我试过关闭所有但没有效果。值得注意的是,如果用户单击取消或退出,应用程序确实会进入 if 语句。
我也尝试过设置一个变量并在 while 循环之外设置关闭命令。
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() 函数的顶部。
您试过在收盘后休息一下吗(handles.window)。 break 将退出 while 循环,因此它不会再次命中该行。
if isempty(COM_PORT) == 1
close(handles.window)
break
end
这样 while 循环在关闭 window 后停止。如果除了关闭 window 之外还需要做更多清理工作,请设置错误标志 .
%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)
将 return true/false 没有 == 1
您的要求不是很清楚,但是您不能通过
保护关闭操作吗
if ishandle(handle.window)
close(handle.window)
end
如果 window 已经被销毁,这将阻止尝试关闭。
为什么不使用简单的 return
和 msgbox
来通知用户单击了取消?
if isempty(COM_PORT)
uiwait(msgbox('Process has been canceled by user.', 'Closing...', 'modal'));
delete(your_figure_handle_here);
return;
end
我尝试将 return 语句与 close(handles.window) 结合使用,但收到错误消息:
Attempt to reference field of non-structure array.
Error in ==> gui>gui_OutputFcn at 292 varargout{1} = handles.output;
看来只需删除 292 上的那一行就可以解决问题。
我正在努力使 application/gui 在用户单击取消或退出输入对话框时完全关闭。我的 gui 的标签称为 window
但是使用 close(handles.window);
会导致程序循环一次然后(在用户单击取消或再次退出后)到达 close(handles.window);
行,当然, 导致无效图形句柄错误。
有没有什么方法可以在不产生错误且不关闭整个 MATLAB 环境的情况下关闭应用程序(如 quit 和 exit)。 error() 是我的临时修复程序,但我不希望应用程序看起来像是崩溃了。
我试过关闭所有但没有效果。值得注意的是,如果用户单击取消或退出,应用程序确实会进入 if 语句。
我也尝试过设置一个变量并在 while 循环之外设置关闭命令。
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() 函数的顶部。
您试过在收盘后休息一下吗(handles.window)。 break 将退出 while 循环,因此它不会再次命中该行。
if isempty(COM_PORT) == 1
close(handles.window)
break
end
这样 while 循环在关闭 window 后停止。如果除了关闭 window 之外还需要做更多清理工作,请设置错误标志 .
%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)
将 return true/false 没有 == 1
您的要求不是很清楚,但是您不能通过
保护关闭操作吗if ishandle(handle.window)
close(handle.window)
end
如果 window 已经被销毁,这将阻止尝试关闭。
为什么不使用简单的 return
和 msgbox
来通知用户单击了取消?
if isempty(COM_PORT)
uiwait(msgbox('Process has been canceled by user.', 'Closing...', 'modal'));
delete(your_figure_handle_here);
return;
end
我尝试将 return 语句与 close(handles.window) 结合使用,但收到错误消息:
Attempt to reference field of non-structure array.
Error in ==> gui>gui_OutputFcn at 292 varargout{1} = handles.output;
看来只需删除 292 上的那一行就可以解决问题。