2014-10-05 47 views
1

我使用Matlab並嘗試從中啓動Java類。 所以我在Matlab中將java類的路徑添加到classpath.txt。然後,我創建了Java類HelloWorld的對象,它完美的作品:Matlab在重新編譯時看不到java類中的更改

o = HelloWorld; 
javaMethod('main', o); 

然而,當我在Helloworld更改代碼,MATLAB不看到這一點:我需要重新啓動與Matlab的改變的代碼的工作Helloworld

有沒有辦法強制Matlab看到Helloworld沒有重新啓動的變化?

回答

2

我猜你試過了Matlab clear classes沒有成功

如果我把它從亞伊爾奧特曼「的MATLAB的Java編程無證祕密」:

只要你沒有改變Java類簽名編譯外當

Java類是沒有用Matlab,自動加載:,你可以用它來逃脫Matlab。要重新加載修改後的Java類,我們需要重新啓動Matlab來重新啓動JVM。 對於放置在動態類路徑上的類,您可以嘗試使用Matlab的clear(‘java’)命令, ,同時記住清除所有全局變量的副作用。然而,這並不總是有效的(例如,如果類簽名已經改變)。

很顯然,如果你覺得自己像一個專家Java程序員,有可能的解決辦法:

專家Java程序員可以嘗試用保羅Milenkovic的建議爲代理類加載器,作爲一種替代重新啓動Matlab或清除Java。正如Dan Spielman解釋的那樣,「粗略的想法是,你爲你的班級創建一個類加載器,然後通過類加載器訪問它。在你重新編譯後,你終止類加載器,然後創建一個新的實例,然後讀取重新編譯的類「。

但底線是:

在實踐中,我建議重新啓動後Matlab的Java類被重新編譯,即使這不是絕對必要的。它可以節省大量令人沮喪的調試,並且追蹤只因爲Matlabkeep內存中的舊類而發生的錯誤。