2009-07-31 7 views
7

대부분 GUI 인 Java 프로그램이 있으며 C++ 명령 행 도구에서 XML 파일에 작성된 데이터를 표시합니다. 이제 Java 프로그램에 버튼을 추가하여 데이터를 새로 고침하고 싶습니다. 이것은 내 프로그램이 C++ 기능을 호출해야 함을 의미합니다.Java에서 C++ 기능 호출 방법

Java에서 시스템 호출을 통해 프로그램을 호출하는 가장 좋은 방법은 무엇입니까? C++ 프로그램은 Mac OS 및 Windows 용으로 컴파일되며 항상 Java 프로그램과 동일한 디렉토리에 있어야합니다.

실행 파일을 생성하고 싶습니다. C 프로그램을 jar 파일에 저장하고 프로그램에서 호출 할 수 있습니까?

답변

5

더 좋은 통신 방법을 가정하지는 (SOAP, ICE, 소켓 등), 내가 Runtime.exec()를 사용하여 실행 파일을 호출 할 것입니다 사용할 수 있습니다. JNI는 직접 인터페이스하는 데 사용할 수 있지만 권장하지는 않습니다. 아니, 당신은 항아리에 실행 파일을 넣을 수 없습니다. 쉘은 실행 방법을 모르기 때문에 실행할 수는 있지만 실행할 수는 없습니다.

+1

JNI의 문제점은 무엇입니까? 그것은 이유가 있기 때문이며, 별도의 프로세스를 시작하는 것보다 훨씬 성능면에서 현명한 방법입니다. –

+0

JNI의 문제점은 실수로 JVM이 충돌 할 가능성이 크다는 것입니다. "segfault : code dumped"에서와 같이. –

+2

@Pavel : 이식성이 떨어지고 덜 안정적이며 단단한 커플 링 – Draemon

6

코드에 액세스 할 수 있고 외부 프로그램과 '대화식'환경을 원할 경우 (예 : 전화 걸기, 결과 얻기, 추가 전화 걸기) JNI를 조사하십시오. JNI를 통해 C 또는 C++ 코드를 &을 JNI 주스와 C 또는 C++ 응용 프로그램을 연결하여 Java 응용 프로그램을 만듭니다.

참조 : 당신이 정말로 단지 "앱 실행하고 결과를 얻을"필요 솔루션의 종류의 경우

http://en.wikipedia.org/wiki/Java_Native_Interface

http://www.acm.org/crossroads/xrds4-2/jni.html

, 당신은을 시작할 수 있습니다 Runtime.exec의()를 체크 아웃 외부 프로그램 &의 출력을 캡처합니다.

참조 : http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1

http://www.rgagnon.com/javadetails/java-0014.html

2

마지막 질문에 답하려면 병에서 실행 파일을 실행할 수 없습니다.

당신의 항아리에 그것을 보관하고 그것을 실행하기 전에 임시 디렉토리/파일로 추출하십시오 (처음으로 그 존재를 확인하고 필요한 경우 추출하십시오). 이렇게하면 배포 할 항아리 만 있으므로 jarred Java 코드와 일치하는 실행 파일을 실행하도록 보장하여 배포를 다소 간소화합니다.

+0

한 번 이와 비슷한 작업을 수행했습니다. 잘 작동했지만 다른 플랫폼에서 작업해야하는 경우 프로그램을 작성하는 것이 어려울 지 잘 모르겠습니다. – sixtyfootersdude