MATLAB:未找到具有匹配签名的构造函数 ‘handle.listener‘问题具体解决方法

MATLAB:未找到具有匹配签名的构造函数 'handle.listener'问题具体解决方法

    • 前言
    • 一、问题描述
    • 二、解决方法

欢迎学习交流!
邮箱: z…@1…6.com
网站: https://zephyrhours.github.io/

前言

图像分类后的精度评价常会用到混淆矩阵进行精度评价,下面是笔者在运行相关代码时遇到的一些问题,具体解决办法如下。

一、问题描述

在使用 rotateXLabels 函数进行混淆矩阵中定义的标签旋转时发生了错误,具体错误如下:
MATLAB:未找到具有匹配签名的构造函数 ‘handle.listener‘问题具体解决方法_第1张图片
根据MATLAB命令行的提示可以发现,问题应该出现在了 handle.listener 函数。所以我们定位文件位置,然后打开该函数,
找到其中对应位置,问题出现在了第322-329行的handle.listener 函数。
MATLAB:未找到具有匹配签名的构造函数 ‘handle.listener‘问题具体解决方法_第2张图片
通过网上查阅资料发现,其时主要问题是MATLAB版本升级后,函数发生了变化造成的,在MATLAB 2014b 以及以后的新的版本中,创建了新的图形系统,所以 handle.listener 就变成了无效函数,取而代之的是 addlistener 函数。具体解决方法如下:

  • 方法一:安装 MATLAB R2014b之前的版本(这种是最无脑的解决方法,不推荐。window系统可以同时安装多个版本的matlab, 所以如果怕麻烦,也可以安装多个版本来解决这个问题)
  • 方法二:修改原来的handle.listener函数,将其替换为addlistener函数,并对其内部属性变量进行适当更改(下面重点说这个,很简单,不用怕,已经帮你搞定,仔细看)

二、解决方法

为了解决这个问题,笔者专门查阅了一些资料,然后将这两个函数的调用方法格式列出,以方便读者参考,具体如下:

handle.listener和addlistener函数的本质是相同的,都是作为事件监听器来使用,但是两个函数的调用格式有所不同,具体如下:

  • handle.listener 调用格式如下:
handle.listener( axh, findprop( axh, 'FontName' ), 'PropertyPostSet', @onAxesFontChanged )        
  • addlistener 调用格式如下:
addlistener( axh, 'FontName', 'PostSet', @onAxesFontChanged ) 

因此我们只需按照addlistener函数的调用格式修改handle.listener函数即可,

  • 将rotateXLabel.m中第322-329行中的handle.listener改为addlistener
  • 将后面()中axh之后的参数由findprop( axh, ‘FontName’ ) 改为’FontName’,其他语句作类似修改。
  • 将后面()中的’PropertyPostSet’改为’PostSet’

第317-332 function addListeners 函数 的代码进行替换,具体的 替换代码 如下:

  function addListeners( ax )
        % Create listeners. We store the array of listeners in the axes to make
        % sure that they have the same life-span as the axes they are listening to.
        axh = handle( ax );
        listeners = [
            addlistener( axh, 'FontName' , 'PostSet', @onAxesFontChanged )
            addlistener( axh, 'FontSize' , 'PostSet', @onAxesFontChanged )
            addlistener( axh, 'FontWeight' , 'PostSet', @onAxesFontChanged )
            addlistener( axh, 'FontAngle' , 'PostSet', @onAxesFontChanged )
            addlistener( axh, 'FontUnits' , 'PostSet', @onAxesFontChanged )
            addlistener( axh,  'OuterPosition' , 'PostSet', @onAxesPositionChanged )
            addlistener( axh, 'XLim' , 'PostSet', @onAxesLimitsChanged )
            addlistener( axh,  'YLim' , 'PostSet', @onAxesLimitsChanged )
            ];
        setappdata( ax, 'RotateXLabelsListeners', listeners );
    end % addListeners

修改后 的函数结果如下:
MATLAB:未找到具有匹配签名的构造函数 ‘handle.listener‘问题具体解决方法_第3张图片

修改完成后,重新运行main函数,即可顺利通过,此时混淆矩阵标签可以完成旋转,具体结果如下:

MATLAB:未找到具有匹配签名的构造函数 ‘handle.listener‘问题具体解决方法_第4张图片

Refereces:
[1] https://blog.csdn.net/ys0129/article/details/112259795
[2] https://blog.csdn.net/stu_lavender/article/details/79615474

你可能感兴趣的:(Matlab,matlab,混淆矩阵,图像处理,分类,精度评价)