我可以在 GUI 初始化代码中加入 try-catch 吗?
Can I put a try-catch in GUI initialization code?
我正在 MATLAB (2016a) 中构建一个 GUI,我将对其进行编译和部署。我想尝试做一些全局错误处理,我发现任何给 GUI 的命令(按钮点击等)在进入特定的回调函数之前首先通过主初始化代码。我的想法是在对 gui_mainfcn
的调用周围放置一个 try-catch
块。让我犹豫的是代码被一些大的旧警告预订:
% Begin initialization code - DO NOT EDIT
... initialization code here ...
% End initialization code - DO NOT EDIT
我可以通过在这个初始化部分中放置一个 try-catch
块来破坏某些东西吗?是否有更好的方法尝试对单个 GUI 进行全局错误处理?
没有理由不能在 GUIDE GUI 的主要功能中插入全局错误处理。这些警告实际上是为了防止人们无意中破坏 GUI 功能。在您的情况下,try
/catch
实际上不会 修改 功能,所以您没问题。您只是想确保不要删除对 gui_mainfcn
的调用,这是一个包含所有 GUI 逻辑的内部函数。
除此之外,您还需要确保填充所有请求的输出参数,以便在发生错误的情况下(对于需要输出参数的函数调用)没有错误(在您的 catch
块)被抛出 因为那个 。不过这应该很容易
此外,我只会将调用包装到 gui_mainfcn
try
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
catch ME
% Go ahead and fill in the requested outputs with [] so we don't get an error
[varargout{1:nargout}] = deal([]);
% Do special error handling here
fprintf('Caught error: %s\n', ME.message);
end
我正在 MATLAB (2016a) 中构建一个 GUI,我将对其进行编译和部署。我想尝试做一些全局错误处理,我发现任何给 GUI 的命令(按钮点击等)在进入特定的回调函数之前首先通过主初始化代码。我的想法是在对 gui_mainfcn
的调用周围放置一个 try-catch
块。让我犹豫的是代码被一些大的旧警告预订:
% Begin initialization code - DO NOT EDIT
... initialization code here ...
% End initialization code - DO NOT EDIT
我可以通过在这个初始化部分中放置一个 try-catch
块来破坏某些东西吗?是否有更好的方法尝试对单个 GUI 进行全局错误处理?
没有理由不能在 GUIDE GUI 的主要功能中插入全局错误处理。这些警告实际上是为了防止人们无意中破坏 GUI 功能。在您的情况下,try
/catch
实际上不会 修改 功能,所以您没问题。您只是想确保不要删除对 gui_mainfcn
的调用,这是一个包含所有 GUI 逻辑的内部函数。
除此之外,您还需要确保填充所有请求的输出参数,以便在发生错误的情况下(对于需要输出参数的函数调用)没有错误(在您的 catch
块)被抛出 因为那个 。不过这应该很容易
此外,我只会将调用包装到 gui_mainfcn
try
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
catch ME
% Go ahead and fill in the requested outputs with [] so we don't get an error
[varargout{1:nargout}] = deal([]);
% Do special error handling here
fprintf('Caught error: %s\n', ME.message);
end