2012-03-01 55 views
15

Tôi muốn chương trình Matlab gọi một tệp java, tốt nhất là với một ví dụ.Gọi Java từ MATLAB?

+10

vui lòng đọc tài liệu. [Sử dụng thư viện Java từ MATLAB] (http://www.mathworks.ch/help/techdoc/matlab_external/f44062.html) – zellus

Trả lời

23

Ok, tôi sẽ cố gắng đưa ra một ví dụ nhỏ tại đây. Hoặc sử dụng các hàm java ngay từ cửa sổ Matlab như zellus gợi ý, hoặc, nếu cần giấy phép, hãy tạo lớp java của riêng bạn. Dưới đây là ví dụ:

package testMatlabInterface; 

public class TestFunction 
{ 
    private double value; 

    public TestFunction() 
    { 
     value = 0; 
    } 

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

Sau đó, biến nó thành tệp jar. Giả sử bạn đặt các tập tin trong một thư mục có tên testMatlabInterface, chạy lệnh này tại cửa sổ dòng lệnh:

jar cvf testMatlab.jar testMatlabInterface 

Sau đó, trong Matlab, điều hướng đến thư mục mà tập tin testMatlab.jar của bạn có vị trí và chạy lệnh, import testMatlabInterface.* nhập khẩu tất cả các lớp học trong gói testMatlabInterface. Sau đó, bạn có thể sử dụng lớp học như vậy:

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

me = 

[email protected] 

>> me.Add(10) 

ans = 

    10 

>> me.Add(10) 

ans = 

    20 

>> me.Add(10) 

ans = 

    30 

Hãy cho tôi biết nếu tôi có thể hỗ trợ thêm.

+0

Cảm ơn rất nhiều! Bài đăng của bạn rất hữu ích. –

28

Có ba trường hợp cần xem xét.

  1. Thư viện cài sẵn Java.

    Tức là, mọi thứ được mô tả here. Các mục này chỉ có thể được gọi trực tiếp. Ví dụ:

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

    Biến chứng duy nhất là ánh xạ Matlab thực hiện giữa các loại dữ liệu Matlab và các loại dữ liệu Java. Các ánh xạ này được mô tả here (Matlab to Java)here (Java to Matlab). (Tl; dr: thường là ánh xạ như bạn mong đợi)

  2. precompiled file * .jar

    Trước tiên, bạn cần phải thêm chúng vào đường dẫn lớp java của Matlab. Bạn có thể làm điều này tự động (có nghĩa là, kỳ họp mỗi Matlab, không cần nhà nước Matlab), như sau:

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

    Bạn cũng có thể thêm các tĩnh bằng cách chỉnh sửa tập tin classpath.txt. Để biết thêm thông tin, hãy sử dụng docsearch java class path.

  3. Tệp biên dịch * đã biên dịch trước.

    Các tệp này tương tự như tệp * .jar, ngoại trừ bạn cần phải thêm thư mục chứa tệp lớp, thay vì bản thân các tệp lớp. Ví dụ:

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

Cảm ơn rất nhiều. Hướng dẫn của bạn thực sự đã giúp! –

+0

ngoại lệ không tìm thấy lớp, mặc dù tôi đã thêm đường dẫn – zinking

+1

@zinking đảm bảo khi bạn biên dịch các lớp Java của mình, bạn đang nhắm mục tiêu phiên bản JRE ít nhất là phiên bản cũ với bản phát hành MATLAB bạn đang sử dụng. Nếu classfiles của bạn có một số phiên bản mới hơn số được hỗ trợ bởi JRE của MATLAB, chúng sẽ không được tải và bạn sẽ nhận được một ClassNotFoundException khi bạn cố gắng sử dụng chúng. Ví dụ, R2006b giao với JRE5, vì vậy bạn cần sử dụng 'javac --source 1.5 --target 1.5 'nếu bạn đang biên dịch với JDK6 hoặc mới hơn. – rob