我用matlab創建了一個簡單的繪圖,並用matlab編譯器sdk創建了一個java jar。Matlab編譯器SDK繪圖waitforFigures函數多線程
我可以運行由matlab創建的java函數並查看我的圖。
我想創建多個圖並在單獨的線程中啓動該功能。 它的工作原理。但是,如果我啓動我的java函數來創建多個圖,第一個線程的waitforFigure()方法正在等待其他圖也被關閉。所以我的第一個線程不會繼續並阻塞,直到在關閉之後創建的其他地塊。
我想實例化一個Java類的對象,由Matlab編譯器生成的SDK創建一個新的Matlab編譯器運行時?!。 爲什麼waitforFigure方法也等待其他圖,如果它在單獨的線程上運行?
這裏是我創建的RunAlgorithm類的函數runFunction。 runFunction方法實例化Matlab編譯器SDK創建的類Class1。它是類的默認名稱。 thePlot函數是在Matlab運行時運行的matlab代碼並繪製我的數據。
void runFunction(MWNumericArray x1, MWNumericArray y1, MWNumericArray z1) throws MWException {
Class1 thePlot = new Class1;
/* Number of points to plot */
try {
/* Plot data */
thePlot.runAlgorithm(x1, y1, z1);
thePlot.waitForFigures();
}
catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
finally {
/* Free native resources */
MWArray.disposeArray(x1);
MWArray.disposeArray(y1);
MWArray.disposeArray(z1);
if (thePlot != null)
thePlot.dispose();
}
}
這裏我簡單的線程如何執行包含我的Matlab類的函數。 我實例化RunAlgorithm類,從文件中讀取數據,並將它轉換爲MWNumericArray傳遞給runFunction方法。 在我的runFunction方法中有waitforFigures方法阻塞。
Thread t1=new Thread() {
public void run() {
RunAlgorithm a = new RunAlgorithm();
RunAlgorithm.Measurements n = null;
try {
n= a.readFile(selectecValue);
System.out.println("File REad");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
a.runFunction(n.mX, n.mY, n.mZ);
} catch (MWException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t1.start();
基本上我讀一個CSV文件,解析到MWnumericArray我的數據,並把它傳遞給RunAlgorithm類。該類內部使用runFunction創建Class1對象,並使用Matlab運行時繪製Matlab-圖。
編輯:
如果我運行我的應用程序兩次。 waitforFigure方法只是等待一個應用程序生成的線程。 這意味着,matlab運行時與應用程序運行一次,獨立於我創建的線程?
因此,Class1實例並不是每次啓動一個新的matlab運行時?
編輯: 如果我編譯我的matlab代碼爲單身人士,然後我的情節刷新。那意味着,我的Class1對象的實例是啓動一個新的matlab運行時?
我只是想知道我是否已經解決了您的問題。 – Anthony
不完全。在我看來,像一個黑客而不是一個正確的解決方案 – Khan