Vrunda Sanghvi
Vrunda Sanghvi

Reputation: 177

Calling Java from MATLAB?

I want Matlab program to call a java file, preferably with an example.

Upvotes: 15

Views: 17408

Answers (2)

Pursuit
Pursuit

Reputation: 12345

There are three cases to consider.

  1. Java built-in libraries.

    That is, anything described here. These items can simply be called directly. For example:

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

    The only complication is the mapping Matlab performs between Matlab data types and Java data types. These mappings are described here (Matlab to Java) and here (Java to Matlab). (tl; dr: usually the mappings are as you would expect)

  2. Precompiled *.jar files

    You first need to add these to Matlab's java class path. You can do this dynamically (that is, per-Matlab session, with no required Matlab state), as follows:

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

    You can also add these statically by editing the classpath.txt file. For more information use docsearch java class path.

  3. Precompiled *.class files.

    These are similar to *.jar file, except you need to add the directory containing the class file, rather than the class files themselves. For example:

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

Upvotes: 29

macduff
macduff

Reputation: 4685

Ok, I'll try to give a mini-example here. Either use the java functions right from the Matlab window as zellus suggests, or, if need permits, create your own java class. Here's an example:

package testMatlabInterface;

public class TestFunction
{
  private double value;

  public TestFunction()
  {
      value = 0;
  }

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

Then turn it into a jar file. Assuming you put the file in a folder called testMatlabInterface, run this command at the command line:

jar cvf testMatlab.jar testMatlabInterface

Then, in Matlab, navigate to the directory where your testMatlab.jar file is located and run the command, import testMatlabInterface.* to import all the classes in the testMatlabInterface package. Then you may use the class like so:

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

me =

testMatlabInterface.TestFunction@7e413c

>> me.Add(10)

ans =

    10

>> me.Add(10)

ans =

    20

>> me.Add(10)

ans =

    30

Let me know if I can be of further assistance.

Upvotes: 24

Related Questions