2012-03-01 13 views
15

Desidero che il programma Matlab chiami un file java, preferibilmente con un esempio.Chiamare Java da MATLAB?

+10

si prega di leggere la documentazione. [Utilizzo di librerie Java da MATLAB] (http://www.mathworks.ch/help/techdoc/matlab_external/f44062.html) – zellus

risposta

23

Ok, proverò a dare un mini-esempio qui. Utilizza le funzioni java direttamente dalla finestra di Matlab come suggerisce zellus oppure, se necessario, crea la tua classe java. Ecco un esempio:

package testMatlabInterface; 

public class TestFunction 
{ 
    private double value; 

    public TestFunction() 
    { 
     value = 0; 
    } 

    public double Add(double v) 
    { 
     value += v; 
     return value; 
    } 
} 

Quindi trasformarlo in un file jar. Supponendo che si inserisce il file in una cartella denominata testMatlabInterface, eseguire il seguente comando nella riga di comando:

jar cvf testMatlab.jar testMatlabInterface 

Poi, in Matlab, passare alla directory in cui si trova il file testMatlab.jar ed eseguire il comando, import testMatlabInterface.* importare tutte le classi nel pacchetto testMatlabInterface. Quindi è possibile utilizzare la classe in questo modo:

>> methodsview testMatlabInterface.TestFunction 
>> me = testMatlabInterface.TestFunction() 

me = 

[email protected] 

>> me.Add(10) 

ans = 

    10 

>> me.Add(10) 

ans = 

    20 

>> me.Add(10) 

ans = 

    30 

Fammi sapere se posso essere di ulteriore assistenza.

+0

Grazie mille! Il tuo post è stato molto utile –

28

Ci sono tre casi da considerare.

  1. Librerie incorporate Java.

    Cioè, qualsiasi cosa descritta here. Questi articoli possono essere semplicemente chiamati direttamente. Ad esempio:

    map = java.util.HashMap; 
    map.put(1,10); 
    map.put(2,30); 
    map.get(1) %returns 10 
    

    L'unica complicazione è la mappatura di Matlab tra tipi di dati Matlab e tipi di dati Java. Queste mappature sono descritte here (Matlab to Java) e here (Java to Matlab). (Tl; dr: di solito le mappature sono come ci si aspetterebbe)

  2. precompilati * .jar

    È necessario prima di aggiungerli al percorso classe Java di Matlab. È possibile farlo in modo dinamico (cioè, per-Matlab sessione, senza richiesta di stato Matlab), come segue:

    javaaddpath('c:\full\path\to\compiledjarfile.jar') 
    

    È anche possibile aggiungere questi staticamente modificando il file classpath.txt. Per ulteriori informazioni, utilizzare docsearch java class path.

  3. File * .class precompilati.

    Questi sono simili al file * .jar, tranne che è necessario aggiungere la directory contenente il file di classe, piuttosto che i file di classe stessi. Per esempio:

    javaaddpath('c:\full\path\to\directory\containing\class\files\') 
    %NOT THIS: javaaddpath('c:\full\path\to\directory\containing\class\files\classname.class') 
    
+0

Grazie mille. La tua guida mi ha davvero aiutato! –

+0

classe non trovata eccezione, anche se ho aggiunto il percorso – zinking

+1

@zinking assicuratevi che durante la compilazione delle classi Java, abbiate come target una versione di JRE almeno vecchia come quella fornita con la versione di MATLAB che state utilizzando. Se i file di classe hanno un numero di versione più recente di quello supportato da JRE di MATLAB, non verranno caricati e si otterrà ClassNotFoundException quando si tenta di utilizzarli. Ad esempio, R2006b viene fornito con JRE5, quindi è necessario utilizzare 'javac --source 1.5 --target 1.5 'se stai compilando con JDK6 o più recente. – rob