如何检查MATLAB句柄是否有效?

时间:2009-12-24 04:09:38

标签: matlab graphics handle

我使用句柄操作绘图上的数据:

x = 1:10; y = sin(x);
h1 = line(x,y);

但是,如果在脚本实际终止之前图形被关闭,则执行此类操作会返回错误。

>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.

在使用它进行任何操作之前,有没有办法检查h1是否是有效的句柄?

2 个答案:

答案 0 :(得分:13)

您可以使用ishandle函数首先检查图形句柄是否有效:

if ishandle(h1)
  set(h1, 'Color', 'green');
end

<强>更新

对于较新版本的MATLAB,句柄对象是实际对象,而不仅仅是数值。更好的选择是对句柄对象使用isvalid方法:

if isvalid(h1)
  set(h1, 'Color', 'green');
end

答案 1 :(得分:4)

请注意,ishandle有一个缺点,它也接受常见的数值,如0(=桌面句柄)和1(默认情况下是第一个打开的数字),这些数值通常也是有效的句柄,尽管可能不是预期的< / em>处理。如果您尝试设置不存在的属性,则仍会看到错误。

要处理此类情况,只需将代码放在异常处理块中:

try
   set(myHandle,propName,propValue);
catch
   % do something useful... (recreate the GUI?)
end