2016-12-11 1 views
-1

나는 이것에 대한 게시물이 이미 있음을 알고 있지만 어느 누구도 내 질문에 대답하지 않았습니다.Java에서 C 프로그램 호출

상황은 다음과 같습니다. C로 작성된 프로그램이 있지만 자바에서 GUI를 개발했습니다. 그래서 내가해야 할 일은 버튼이나 콤보 상자를 클릭 할 때 C 프로그램을 호출하는 것입니다.

이렇게하려면 C 프로그램을 컴파일 한 다음 내 Java 인터페이스에서 호출 할 수 있습니까? (가능하다면 어떻게 할 수 있습니까?).

또는 이어야합니까? JNI를 사용합니까? (나는 그것에 대해 몇 가지 게시물을 읽었지만, 단지 하나의 프로젝트를 위해 그것을 배우는 것은 상당히 복잡해 보였다).

+2

예는 Java 프로그램과 상호 운용하기 위해 C 코드가 필요한 경우 자바 – aleb2000

+0

에서 네이티브 메소드를 호출하는 JNI를 사용해야합니다 JNI (또는 JNA)를 사용하는 것이 올바른 해결책입니다. 컴파일 된 프로그램을 시작하기를 원하면 시스템 명령을 통해 실행할 수 있습니다 (다른 문제가 많이 발생할 수 있음을 유의하십시오). – UnholySheep

+0

이것은 잘 끝나지 않을 것입니다. 당신은 이것을 더 신중하게 생각해야합니다. C 프로그램을 Java로 포팅합니다. 때가됐다. 너 자신에게 많은 상심을 안겨줄거야. C 실행 파일을 재사용함으로써 발생하는 "절약"은 그만한 가치가 없습니다. – duffymo

답변

1

상호 운용성을 최대화하려면 JNI를 사용해야하지만 간단한 접근 방식으로 C 코드를 컴파일하고 Java에서 C 실행 파일을 Runtime.getRuntime().exec()으로 호출하면됩니다.

당신이 응답을 읽을 UNIX 아래에있는 경우 당신이 뭔가를 할 수 있습니다 :

String line; 
Process p = Runtime.getRuntime().exec("/path/to/C/executable"); 

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
while ((line = in.readLine()) != null) { 
    System.out.println(line); 
} 
in.close(); 
+2

Runtime.exec는 오래 전에 [ProcessBuilder] (https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html)에서 폐기되었습니다. – VGR

+0

@ VGR 예 죄송합니다 ... 자바를 사용한 이후로 오래되었습니다 ... 원하는 경우 내 대답을 편집 할 수 있습니다. –