2013-01-08 73 views
4

我使用一個外部的jar(由我developped)到我的MATLAB謨(由我developped)與javaaddpath命令。MATLAB javaaddpath不工作了(與JDK 1.7內置的jar)

我已經更新從MATLAB r2011a到r2012b,JDK我的編程環境在從XP 1.6.0_29到1.7.0_09和窗口七。

首先我還沒有重新編譯我的jar文件,我的整個項目仍然是工作(沒有錯誤運行)。

但現在,我正在嘗試重新編譯我的jar文件。我遇到了一些問題,但解決了(請參閱:javac @<opiton_file> and encoding)。但現在,我的jar工具被重建,我不能用它到MATLAB ... MATLAB顯示錯誤:

Undefined variable "optimizer" or function "optimizer.Gui". 

,其中優化是一個包(即jar文件中的目錄,目錄中包含一個桂類)。

總之,我正在使用的代碼(最後一行必須彈出一個JFrame):

javaaddpath('the full path of my jar file.jar'); 
optimizer.Gui; 

而不更新jar文件的編譯版本,它的工作。使用新版本(相同的源代碼),matlab輸出錯誤。

我在JAR文件和一個manitifest指定此Main類作爲主類的根類主(包含主函數)。這個Main類做了一些測試,以確保所有的jar文件的功能正在工作。所以我可以運行java -jar my_jar_file.jar並查看所有測試都正常(其中一個測試顯示了我的optimizer.Gui)。

是否有javac版本和matlab不兼容?是不是因爲我遇到了一些麻煩文件編碼?...

回答

2

好吧,我重新安裝了JDK 1.6.0_37(最後avaible 1.6版本)。 我已經使用我的構建工具(create_jar.bat),只需強制路徑到這個老jdk。 它在Matlab r2012b下工作就像一個魅力!

- > Matlab r2012b與用jdk 1.7構建的jar文件不兼容。

(謝謝Matworks不要阻止)。

+0

您可以使用'setenv()'將JAVA_HOME變量設置爲適當版本的'Java'(假設它已經安裝)。例如:'''matlab' r2014b''setenv('JAVA_HOME','C:\ Progra〜1 \ Java \ jdk1.7.0_11')'' – imriss

1

這與MATLAB沒有任何關係。它是一個通用的JAVA設計限制。你不能在JRE6中使用爲JRE7編譯的類。

由於使用MATLAB JRE6不能使用JAVA 7班,由於從Java端的限制。

+0

好的,但它沒有寫入Matlab文檔(javaaddpath),我們必須使用jdk 1.6來編譯我們的jar。他們可以寫一個免責聲明......而且javaaddpath正在工作,因爲jar文件被列入javaclasspath的動態部分。在加載jar文件時,他們可以在java版本的jar文件中添加一個支票。它是一個商業產品,非常昂貴!它們提供了一個文檔/支持的函數來加載和使用外部jar,所以即使這個bug是Java固有的,它也與Matlab有關! ;) – Alexxx