2014-12-11 5 views
0

안녕하세요. 미리 감사드립니다. 다음과 같은 문제가 있습니다. GUI가 있고 버튼이있어 실행중인 C++ 프로그램을 시작해야합니다. 같은 기계. 이 프로그램은 데이터 공유를 위해 SSM (ROS like)이라는 특정 프레임 워크를 사용합니다. 터미널에서 시작하면 프로그램 자체가 제대로 작동하지만 자바 프로세스 빌더로 시작할 때 모든 데이터에 액세스 할 수 없지만 프로세스가 계속 실행되는 것을 볼 수 있습니다.Java 프로세스 빌더, 프로그램 프로세스가 시작되지만 프로그램이 CPU 또는 메모리를 사용하지 않음

저는 우분투 14.04와 OpenJDK7을 사용하고 있습니다. 내가 사용 코드 (주석에 따라 업데이트 ) 다음과 같다 :

ProcessBuilder builder = new ProcessBuilder(command); 
builder.redirectOutput(Redirect.INHERIT); 
builder.redirectError(Redirect.INHERIT);  
builder.start(); 
내가 UDP를 통해받을 명령은 일부 데이터에서 오는

:

command[0] = Main_gui.getHomePath()+"PFforAEV_autoCalib_20140418/PFforAEV0.2.2"; 
command[1] = String.valueOf(initialPosition[0]); 
command[2] = String.valueOf(initialPosition[1]); 
command[3] = String.valueOf(initialPosition[2]); 
command[4] = "walllandmark_F41_20130125"; 

더 구체적으로 프로세스 PFforAEV0.2.2이 실행 중이지만 CPU 또는 메모리를 사용하지 않는 것 같습니다. 프레임 워크를 통해 데이터에 액세스 할 수 없습니다. 마치 매달려있는 것처럼 보입니다.

자세한 내용을 알아 보려면 그냥 물어보십시오.

나를 도와 줄 사람이 있습니까? 감사합니다.

+0

당신의 출력을 읽었다보기 흐름? http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html을 참조하십시오. – Jayan

+0

@ rafalopez79에서 아래 해결책을 시도했습니다. – Dario

답변

0

당신은 자식 프로세스의 표준 출력과 표준 에러의 InputStream로부터 읽거나 부모 프로세스의 스트림로 리디렉션 할 수 있습니다

ProcessBuilder builder = new ProcessBuilder(command); 
builder.redirectOutput(Redirect.INHERIT); 
builder.redirectError(Redirect.INHERIT); 
builder.start(); 

example

+0

해결책을 시도했지만 작동하지 않습니다. 아직 CPU 및 정보가 없습니다. 출력 및 오류를 잘못 리디렉션하지 않았다면 부모 프로세스로 출력하는 것이 좋습니다. 이 경우 출력을 관리하기 위해 다른 작업을 수행해야하며 멈추지 않습니다 (출력 btw는 신경 쓰지 않습니다)? – Dario

+0

아마도 strace를 사용하여 무언가를 보려고 시도합니다 ... – rafalopez79

+0

텍스트 파일의 출력으로 (링크가 제안한대로) 작동하고 있습니다. 고맙습니다. – Dario