2012-07-13 3 views
1

올해 초에 Matlab 환경에서 이미지를 수집 할 목적으로 Java GUI를 코딩합니다. 나는 matlab에서 Java_Gui.jar를 호출 할 수 있었고 .jar 파일의 일부 클래스를 사용할 수 있었다. GUI는 WinXP 32 비트 및 Matlab2006b 및 Matlab 2008a에서 테스트되었습니다. 자바 클래스를 호출하기위한 MATLAB 코드는 :Matlab2011a 및 64bit 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에서 Matlab의 32 비트 버전과 호환됩니다!

답변

2

아마 JAR이 JNI를 사용합니다.

JNI는 기본 부분을 포함하는 DLL과 다른 비트 프로세스를로드 할 수 없습니다. 이 경우 64 비트 버전의 라이브러리 (Java 코드는 다르지 않고 기본 DLL이 필요합니다)가 필요합니다.

+0

당신 말이 맞습니다. Matlab에서 다음 오류가 발생했습니다 :'D : \ Matlab2011_full \ sys \ java \ jre \ win64 \ jre \ bin \ sserial.dll : IA 32 비트 .dll을 AMD 64 비트 플랫폼에로드 할 수 없습니다. ' 그러나 이상한 점은 Matlab 외부의 JavaGUI가 동일한 DLL로 제대로 작동한다는 것입니다. – Makaroni

+2

@Makaroni : 그것은 프로세스의 bitness에 의존하고 Windows의 bitness에 의존하지 않습니다. 따라서 64 비트 Matlab이 실패하는 동안 32 비트 응용 프로그램이 정상적으로 작동 할 수 있습니다. (또한 MatLab의 32 비트 학생 사본도 64 비트 Windows에서도 잘로드됩니다.) –

2

문제는 Java에서 64 비트 JRE로 실행하기 위해 64 비트 버전이 필요한 원시 라이브러리를 호출하는 라이브러리를 사용하고 있다는 것입니다. Matlab의 32 비트 버전으로 전환하거나 원시 호출을 sserial로 호출하고 64 비트 시스템의 경우 64 비트 버전으로 업데이트하는 라이브러리를 추적해야합니다.

+0

그리고 내가 도서관에서 도서관을 가지고 있지 않다면? 다른 해결책이 있습니까? 추신 아래 내 의견을 참조하십시오. – Makaroni

+0

즉, 문제는 내 32 비트 sserial dll 파일에 무엇입니까? – Makaroni

+0

네, 32 비트 JRE (Matlab에는 Matlab 외부에서 잘 실행할 수있는 자체 JRE 패키지가 필요합니다) 또는 64 비트 DLL이 필요합니다. – LINEMAN78