2012-07-13 87 views
1

今年早些時候,我編寫了Java GUI,以便在Matlab環境下工作,用於圖像採集目的。我能夠在matlab中調用Java_Gui.jar,並使用.jar文件中的一些類。 GUI在WinXP 32bit,Matlab2006b和Matlab 2008a上進行了測試。調用Java類的Matlab代碼:Matlab2011a和64位Win7中的Java GUI

clc,clear all,close all 

javaaddpath('C:\Users\...\JavaGUI.jar'); 

JavaGUI.main([]); 
pause(1) 
JavaGUI.main2(); 

然而,在64位試過當同一個程序與Win7和Matlab2011a熟悉的問題出現了:

??? Java exception occurred: 
java.lang.UnsatisfiedLinkError: no sserial in java.library.path 

任何想法,爲什麼會出現這種情況?也許我應該在64位版本上編譯我的jar文件? 代碼仍然在32位Win上工作,只是檢查它。

回答:適用於64位Windows 7上的32位版本的Matlab!

回答

2

也許你的JAR使用JNI。

JNI將不能加載到與包含本機部分的DLL不同位數的進程中。在這種情況下,您需要一個64位版本的庫(Java代碼沒有區別,本地DLL)。

+0

你說得對。在Matlab中發生以下錯誤:'D:\ Matlab2011_full \ sys \ java \ jre \ win64 \ jre \ bin \ sserial.dll:無法在 AMD 64位平臺上加載IA 32位.dll。然而,對我來說奇怪的是,Matlab之外的JavaGUI可以正常使用相同的dll。 – Makaroni 2012-07-13 17:05:48

+2

@Makaroni:它取決於進程的位數,而不是Windows的位數。所以你可能有一個32位應用程序工作正常,而64位Matlab失敗。 (即使在64位Windows上,我的32位MatLab學生副本也會加載它)。 – 2012-07-13 17:10:12

2

問題是,您正在使用java中的一個庫,它調用了需要64位版本的本機庫,以便在64位JRE中運行它。您需要切換到32位版本的Matlab,或者追蹤使本地調用sserial並更新爲64位系統的64位版本的庫。

+0

如果我沒有sserial的圖書館?還有其他解決方案嗎?附:請參閱下面的評論。 – Makaroni 2012-07-13 17:08:07

+0

換句話說,問題出在我的32位sserial dll文件上? – Makaroni 2012-07-13 17:16:06

+0

是的,你需要一個32位JRE(Matlab有自己的JRE包裝在它裏面,這就是爲什麼你可以在Matlab以外運行)或64位DLL – LINEMAN78 2012-07-13 17:44:04