2012-06-01 2 views
0

Java에서 gnuplot 프로세스를 실행하는 데 문제가 있습니다. 나는 gnuplot 스크립트 파일을 만들고 나서 자바 프로그램에서 실행하고있다. 나는 프로세스 빌더와 Runtime.getRuntime(). exec ("blah blah ...")를 사용하여 선행 작업을 작성하려고 노력했지만, 어느 것도 완전한 기능을 수행 할 수 없다. 재미있는 점은 gnuplot을 통해 생성하는 이미지 파일이 이름에 공백없이 디렉토리에 저장되지 않는 한 런타임을 사용하여 프로세스가 거의 완벽하게 작동한다는 것입니다. 그러나 ProcessBuilder가 전혀 작동하지 않으며 "CreateProcess error = 2, 지정된 파일을 찾을 수 없습니다"라는 메시지가 나타납니다.Java에서 gnuplot 프로세스를 실행하는 데 문제가 있습니다.

이 내용을 이해하는 데 너무 오래 걸렸습니다. 감사하겠습니다.

내가 사용하는 코드

은 여기에 있습니다 :

File script = new File("Demo.plt"); //Script file that outputs to a PNG file 

//This works as long as the script file doesn't output to a png with a space in it's filepath 
Process aProcess = Runtime.getRuntime().exec("gnuplot " + script.toString()); 
Thread.currentThread().sleep(1000); 
aProcess.waitFor(); 

//This doesn't work at all 
ProcessBuilder builder = new ProcessBuilder("gnuplot " + script.toString()); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 

그리고 관계없이 출력 라인의 공간, 자바의 외부에서 실행하는 경우 스크립트가 작동하는지 알고있다. 나도 '\'(이스케이프 문자를 사용하여 공간) 시도하고 그 중 하나를 작동하지 않습니다. 사실, 여기 내가 사용하는 코드입니다 :

String graphName = "DemoGraph"; 
//Isolate the FilePath 
String path = script.getPath(); 
path = path.replace(script.getName(),""); 
path = path.replace(File.separator, "\\\\"); //Gets around any parsing errors in filepaths on Windows 
path = path.replace(" ", "\\ "); //Should get around parsing errors with spaces in gnuplot, but it seems to be irrelevant. 

scriptFileWriter.write("set output \"" + path + graphName + ".png\"\r\n"); 

자바에 문제가 될 수있어, 스크립트가 Windows 명령 줄에서 실행되기 때문에를, 그리고의 gnuplot 명령 행 및 frun에서 이중으로 실행되고 -clicking the

+0

gnuplot에서 오류 메시지가 표시됩니까? "경로 이름에 공백이있을 때 원하는 디렉토리에 png 파일이 없습니다."이외의 다른 증상이 있습니까? – mgilson

+0

또한 자바에 대해서는 잘 모르겠지만''출력 설정 \ ""+ path + graphName + ".png \"\ r \ n "'문자열을 출력하여 어떤 gnuplot 보고있어? – mgilson

+0

다음 문자열 : '출력 설정'C : \\ Users \\ toms \\ Documents \\ NetBeansProjects \\ DRTTPS \\ Simulation \ Comparison \\ DemoGraph.png " ' Gnuplot에서 오류 메시지가 표시되지 않습니다. 내가 볼 수 있도록 오류 스트림을 표준 오류로 전달하는 방법을 잘 모르겠다. 대상 파일을 만들지 않는다는 것 외에 다른 증상은 없습니다. 이전에 가지고 있던 다른 오류는 파일을 만들었지 만 작성하지는 못했지만이 오류는 그냥 수행하지 않습니다. – Andrew

답변

1

파일 이름 주위에 따옴표를 넣는 것을 잊어 버렸습니다. STUPID 오류가 발생했습니다.

관련 문제