2009-07-14 3 views
2

Lors de l'utilisation de Java à partir de Matlab, y a-t-il un moyen de déterminer d'où vient le chemin de la classe java de matlab? J'essaie de diagnostiquer une erreur causée par des versions conflictuelles de la même classe utilisée simultanément. En particulier, la classe que je cherche est org.apache.lucene.store.FSDirectory. Il semble être utilisé par l'une des boîtes à outils matlab, mais je ne sais pas lequel.Déterminer l'emplacement d'une classe java chargée par Matlab

Répondre

7

De http://www.exampledepot.com/egs/java.lang/ClassOrigin.html

// Get the location of this class 
    Class cls = this.getClass(); 
ProtectionDomain pDomain = cls.getProtectionDomain(); 
    CodeSource cSource = pDomain.getCodeSource(); 
    URL loc = cSource.getLocation(); // file:/c:/almanac14/examples/ 
+0

Cela fonctionne! Merci. – weiyin

2

En supposant qu'un URLClassLoader est utilisé, vous pouvez obtenir l'URL file: du fichier de classe comme ceci:

ProblemClass.class.getResource("ProblemClass.class") 
0

Utilisez la fonction inmem comme suit:

[M,X,J] = inmem 

Cette fonction retourne la liste des classes Java dans l'argument de sortie J. (Elle renvoie également les noms de tous les fichiers M actuellement chargés dans M et les noms de tous les fichiers MEX actuellement chargés dans X.)

Voici un exemple de sortie de la fonction inmem:

[m,x,j] = inmem; 

MATLAB® affiche:

j = 
    'java.util.Date' 
    'com.mathworks.ide.desktop.MLDesktop' 
+0

Merci, mais cela ne m'aide pas à comprendre exactement où java.util.Date se trouve sur le système de fichiers. – weiyin

1

par Thorbjørn Ravn Andersen, si référence j à un objet java dans Matlab, son emplacement peut être récupéré avec la ligne de code matlab suivante:

j.getClass().getProtectionDomain().getCodeSource().getLocation().getPath() 
0

Depuis 1.5 en utilisant:

java -verbose:class 

Imprime où chaque classe a été chargé.

Questions connexes