2009-06-17 5 views
6

Comment passer une poignée de fonction matlab à un objet Java et l'appeler depuis Java (c'est-à-dire que Java doit indiquer à matlab quand il est prêt avec un calcul). J'essaie d'utiliser la classe com.mathworks.jmi.Matlab pour évaluer les expressions Matlab dans l'objet Java, mais je ne vois pas comment 1) transférer le handle de funcktion de rappel vers Java, et 2) l'invoquer depuis Java en utilisant éventuellement la classe com.mathworks.jmi.Matlab.Appel de la poignée de callback/fonction matlab depuis Java

Merci, jakob

Répondre

2

Hmm. On dirait que JMI est l'un de ces éléments internes de matlab qui pourraient être sujets à changement dans les futures versions. J'ai trouvé ces articles en ligne, je ne sais pas si ils vont aider dans votre cas.

+0

Merci, j'ai trouvé ces articles mais ils ne me disent pas comment passer les handlescallbacks de la fonction à java et les invoquer depuis java.La seule chose que j'ai pu faire avec jmi a été d'évaluer les commandes matlab de java, mais j'ai besoin de dire à matlab (de java) d'exécuter un handle de fonction spécifique. –

+0

ma conjecture est que vous ne pouvez pas le faire. J'ai rencontré un problème similaire (en essayant de faire passer une fonction Matlab en tant qu'interface de rappel dans un appel java de MATLAB - pas de manière apparente de passer au matlab) et je n'ai pas eu de chance. –

0

Pour passer un rappel dans Matlab, vous passez le nom de la fonction Matlab et il est des arguments en com.mathworks.jmi.Matlab.feval ("matlabControlcb", ..., 0); Le ... est un Object [] où [0] = commande et [1..end] = arguments.

Voir aussi: FEVAL FUNC2STR

1

Je crains que je ne sais pas d'une façon de faire exactement ce que vous avez demandé, mais il y a deux façons dont vous pouvez faire quelque chose de similaire:

1 Si vous définissez un rappel Java depuis Matlab, vous pouvez lui envoyer une poignée de fonction Matlab. Lorsque l'événement de rappel Java est déclenché, votre fonction Matlab est appelée. Un exemple pour cela peut être trouvé ici: http://UndocumentedMatlab.com/blog/uicontrol-callbacks/. Notez que cela n'a pas besoin de JMI pour s'exécuter.

2) JMI a besoin d'une chaîne (nom de la fonction ou ligne de commande) que Matlab doit évaluer. Si vous connaissez le nom de la fonction à l'avance, vous pouvez l'utiliser. Sinon, vous pouvez préparer une fonction de commutation Matlab (dont le nom est connu à l'avance) pour diriger dynamiquement votre rappel vers l'action Matlab appropriée.

Je prévois d'exécuter un article sur JMI dans le site http://UndocumentedMatlab.com à la mi-Avril, alors restez à l'écoute ...

Yair Altman

+1

Une autre façon d'y parvenir est de déclencher un événement à partir de votre code Java et de placer un rappel Matlab sur cet événement, comme décrit dans http://undocumentedmatlab.com/blog/matlab-callbacks-for-java-events/ –

0

essayer cet outil: http://jamal.sourceforge.net/

Il fait exactement ce vous avez besoin et bien documenté.

Le principe sur lequel il est basé est de faire appel RMI à la partie serveur qui s'exécute dans Matlab. La sortie est renvoyée au programme Java. Encore une fois, cela dépend de jmi ...

1

matlabcontrol est une API Java qui vous permettra de faire cela. Il peut invoquer une fonction MATLAB en utilisant feval. Il ne peut pas fonctionner directement sur une poignée de fonction, mais comme mentionné par KitsuneYMG, vous pouvez utiliser func2str pour convertir un handle de fonction en une chaîne. Pour commencer, vous pouvez jeter un oeil à la walkthrough.

Questions connexes