IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

[addlistener] Undefined function or method


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut [addlistener] Undefined function or method
    Bonjour,

    après lecture de la commande suivante issue d'un m-file(programmant une GUI),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    addlistener(dataTable,'UserData','PostSet',@(p01,p02)launchMethod('dataStateChange',[]));
    Matlab affiche l'erreur suivante:
    ??? Undefined function or method 'addlistener' for input arguments of type 'function_handle'.

    Error in ==> mymainGUI at 37
    addlistener(dataTable,'UserData','PostSet',f1);
    dataTable: le function_handle d'un objet "uitable"
    launchMethod: méthode pouvant prendre des arguments (utilisant "varargin")

    Je ne comprends pas l'apparition de cette erreur car ce code marchait il y a une semaine et de plus, la doc indique bien:
    addlistener(HSOURCE, PROPERTY, 'EVENTNAME', CALLBACK)
    Quelqu'un peut il m'aider à:
    -comprendre l'erreur;
    - faire en sorte que le listener fonctionne pour la propriété "UserData" de dataTable.

    Merci d'avance,
    oodbae

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Que te renvoi la commande
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    bonjour,
    merci d'avoir répondu. J'ai laissé le programme en standby ces derniers jours.

    la commande renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Programme\MATLAB\R2008a\toolbox\matlab\uitools\@opaque\addlistener.m  % opaque method
    , que ce soit dans le worspace de base ou dans le workspace local de la fonction à l'aide du déboggeur.

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    de plus , en mode de déboguage, l'aide pour la fonction "addlistener" s'affiche correctement en appuyant sur F1 en placant un "breakpoint" juste devant la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addlistener(dataTable,'UserData','PostSet',@(p01,p02)launchMethod('dataStateChange',[]));
    . Et, enfin, le problème ne change pas, selon que je mets un ou pas:

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Et pourrais-tu nous montrer ce que contient dataTable?
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    oui:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    dataTable=uitable(...
        'Position',[10 50 300 200],...
        'RowName',[],...
        'ColumnName','numbered',...
        'data',cell(3,3));
    %setting a listener to proof if data was loaded, in which case
    %dataTable.UserData.allowDataAnalyse would have been set to true. then the
    %uimenu for launching a Backward Selection will be set readable
    ud01=struct('allowDataAnalyse',false);
    set(dataTable,'UserData',ud01);
     
    addlistener(dataTable,'UserData','PostSet',@(p01,p02)launchMethod('dataStateChange',[]));

  7. #7
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    C'est étrange, chez moi ca fonctionne (enfin ca ne met pas d'erreur...)

    As-tu changer quelquechose entre le moment où ca marchait et maintenant?
    Si tu testes ce code en dehors du contexte de ta fonction (dans le CommandWindow par exemple), est-ce qu'il marche?
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    voici le résultat dans la command window

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    >> dataTable=uitable(...
        'Position',[10 50 300 200],...
        'RowName',[],...
        'ColumnName','numbered',...
        'data',cell(3,3));
    %setting a listener to proof if data was loaded, in which case
    %dataTable.UserData.allowDataAnalyse would have been set to true. then the
    %uimenu for launching a Backward Selection will be set readable
    ud01=struct('allowDataAnalyse',false);
    set(dataTable,'UserData',ud01);
     
    addlistener(dataTable,'UserData','PostSet',@(p01,p02)launchMethod('dataStateChange',[]));
    ??? Undefined function or method 'addlistener' for input arguments of type 'function_handle'.
     
    >> which addlistener
    C:\Programme\MATLAB\R2008a\toolbox\matlab\uitools\@opaque\addlistener.m  % opaque method
    >>

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par oodbae_adriano Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> which addlistener
    C:\Programme\MATLAB\R2008a\toolbox\matlab\uitools\@opaque\addlistener.m  % opaque method
    Les dossiers @opaque (un peu comme private) empêchent l'accès à leur contenu.
    Essai de copier ce fichier dans ton dossier courant.

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    merci pour l'idée. Apperemment, cette fonction addlistener est programmée pour les objets java. Voici le message d'erreur lors de l'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> addlistener
    Too many input arguments.
     
    Error in ==> mymainGUI at 40
     h1=addlistener(dataTable,'UserData','PostSet',@(p1,p2)launchMethod('dataStateChange',[]));
    ensuite, la touche F1 fournit:
    addlistener Add a listener to a Java object.

    L=addlistener(JObject, EventName, Callback)
    Adds a listener to the specified Java object for the given
    event name. The listener will stop firing when the return
    value L goes out of scope.

    addlistener(JObject)
    Lists all the available event names.

    Examples:

    jf = javaObjectEDT('javax.swing.JFrame');
    addlistener(jf) % list all events

    % Basic string eval callback:
    addlistener(jf,'WindowClosing','disp closing')

    % Function handle callback
    addlistener(jf,'WindowClosing',@(o,e) disp(e))

    Overloaded methods:
    handle/addlistener
    opaque/addlistener
    ceci, maintenant que j'ai déplacé le fonction de @opaque jusque dans le dossier courant.

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    alors j'ai cherché la fonction @handle/addlistener mais hélas, des messages d'erreur apparaissent encore, différents cette fois.ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     which handle/addlistener
    C:\Programme\MATLAB\R2008a\toolbox\matlab\lang\@handle\addlistener.m
    ensuite,exécution à nouveau après avoir copié la fonction dans le dossier courant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      % handle method
    ??? Attempt to execute SCRIPT addlistener as a function:
    u:\MATLAB\regression\addlistener.m
     
    Error in ==> mymainGUI at 40
     h1=addlistener(dataTable,'UserData','PostSet',@(p1,p2)launchMethod('dataStateChange',[]));


    [EDIT] dans ce dernier cas, c'est à peu près normal puisque le fichier m copié collé ne contient que du commentaire

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    alors, j'ai changé un peu la syntaxe. La commande est maintenant rédigée:
    @handle\addlistener(...

    et,... il y a toujours un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Undefined function or method 'addlistener' for input arguments of type 'function_handle'.
     
    Error in ==> mymainGUI at 39
    @handle\addlistener(dataTable,'UserData','PostSet',@(p01,p02)launchMethod('dataStateChange',[]));

    Si quelqu'un a une idée sur le problème entier, merci de me prévenir!

    salutations

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    pour info:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     which -all addlistener
    C:\Programme\MATLAB\R2008a\toolbox\matlab\uitools\private\addlistener.m  % Private to uitools
    C:\Programme\MATLAB\R2008a\toolbox\matlab\uitools\@opaque\addlistener.m  % opaque method
    addlistener is a built-in method                                         % handle method
    addlistener is a built-in method                                         % function_handle_workspace method
    addlistener is a built-in method                                         % helpUtils.helpProcess method
    addlistener is a built-in method                                         % meta.class method
    addlistener is a built-in method                                         % helpUtils.classWrapper.rawMCOS method
    addlistener is a built-in method                                         % helpUtils.classWrapper.MCOS method
    addlistener is a built-in method                                         % helpUtils.classWrapper.base method
    addlistener is a built-in method                                         % helpUtils.classWrapper.raw method
    addlistener is a built-in method                                         % helpUtils.classInformation.fullClass method
    addlistener is a built-in method                                         % helpUtils.classInformation.classSubItem method
    addlistener is a built-in method                                         % helpUtils.classInformation.classItem method
    addlistener is a built-in method                                         % helpUtils.classInformation.base method
    addlistener is a built-in method                                         % dynamicprops method
    addlistener is a built-in method                                         % meta.method method
    addlistener is a built-in method                                         % helpUtils.classInformation.rawConstructor method
    addlistener is a built-in method                                         % helpUtils.classInformation.fileConstructor method
    addlistener is a built-in method                                         % helpUtils.classInformation.constructor method
    addlistener is a built-in method                                         % helpUtils.classInformation.fullConstructor method
    addlistener is a built-in method                                         % helpUtils.classInformation.localConstructor method
    C:\Programme\MATLAB\R2008a\toolbox\matlab\lang\@handle\addlistener.m     % handle method

    et de plus, le problème apparaît sur Matlab R2008a, mais pas sur matlab2010.

  14. #14
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut
    est-ce que quelqu'un sait comment régler la priorité d'appel d'une fonction? J'ai l'impression que @opaque\addlistener est appelée par défaut, alors que je voudrais appeler \lang\@handle\addlistener . La première fonction est adaptée pour les objets java, tandis que la deuxième est adaptée pour les "handle objects" standards.

    cordialement,
    oodbae

Discussions similaires

  1. Réponses: 15
    Dernier message: 01/08/2011, 08h38
  2. feval Undefined function or method
    Par statdidos dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/05/2011, 16h56
  3. Réponses: 0
    Dernier message: 31/01/2011, 16h06
  4. [Débutant] Undefined function or method 'plotcontour' for input arguments of type
    Par marionba dans le forum MATLAB
    Réponses: 4
    Dernier message: 28/10/2009, 21h41
  5. Undefined function or method 'syms' for input
    Par hg Georges dans le forum MATLAB
    Réponses: 1
    Dernier message: 24/03/2008, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo