2012-03-01 27 views
15

Quiero que el programa Matlab llame a un archivo java, preferiblemente con un ejemplo.¿Llamar a Java desde MATLAB?

+10

lea la documentación. [Uso de las bibliotecas de Java de MATLAB] (http://www.mathworks.ch/help/techdoc/matlab_external/f44062.html) – zellus

Respuesta

23

Ok, intentaré dar un pequeño ejemplo aquí. Utilice las funciones de Java directamente desde la ventana de Matlab como lo sugiere zellus, o, si es necesario, cree su propia clase de Java. Aquí hay un ejemplo:

package testMatlabInterface; 

public class TestFunction 
{ 
    private double value; 

    public TestFunction() 
    { 
     value = 0; 
    } 

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

Luego, conviértalo en un archivo jar. Suponiendo que usted pone el archivo en una carpeta llamada testMatlabInterface, ejecute este comando en la línea de comandos:

jar cvf testMatlab.jar testMatlabInterface 

Luego, en Matlab, vaya al directorio donde se encuentra el archivo de testMatlab.jar y ejecutar el comando, import testMatlabInterface.* a importar todos las clases en el paquete testMatlabInterface. Entonces puede usar la clase de este 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 

Avísame si puedo ser de más ayuda.

+0

¡Muchas gracias! Tu publicación ha sido muy útil. –

28

Hay tres casos a considerar.

  1. bibliotecas integradas de Java.

    Es decir, cualquier cosa que se describa here. Estos artículos simplemente pueden ser llamados directamente. Por ejemplo:

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

    La única complicación es la asignación que Matlab realiza entre los tipos de datos Matlab y los tipos de datos Java. Estas asignaciones se describen here (Matlab to Java) y here (Java to Matlab). (Tl; dr: por lo general las asignaciones son como era de esperar)

  2. precompilados archivos * .jar

    primero tiene que añadir estos a la ruta de clase java de Matlab. Usted puede hacer esto de forma dinámica (es decir, de sesión por Matlab, sin necesidad de estado de Matlab), de la siguiente manera:

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

    También puede agregar estos estáticamente mediante la edición del archivo classpath.txt. Para más información, use docsearch java class path.

  3. Precompilados * archivos de clase.

    Estos son similares al archivo * .jar, excepto que necesita agregar el directorio que contiene el archivo de clase, en lugar de los archivos de clase. Por ejemplo:

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

Muchas gracias. ¡Tu guía realmente ayudó! –

+0

clase no encontrada excepción, aunque he agregado la ruta – zinking

+1

@zinking, asegúrese de que al compilar sus clases Java, se dirige a una versión de JRE al menos tan antigua como la que se envía con la versión de MATLAB que está utilizando. Si sus archivos de clase tienen un número de versión más nuevo que el admitido por el JRE de MATLAB, no se cargarán y obtendrá una excepción ClassNotFoundException cuando intente usarlos. Por ejemplo, R2006b se envía con JRE5, por lo que debe usar 'javac --source 1.5 --target 1.5 'si está compilando con JDK6 o más reciente. – rob