2013-10-02 2 views
0

Java 프로그램에서 아래 명령을 보내고 싶지만 응답 읽기에 지나치게 귀찮게하지 마십시오. 어떤 생각 나는 할 수있는 방법이java 프로세스 빌더를 사용하여 wav 파일 재생

명령 아래

aplay ~/javafx/examples/PrayerTime/src/Audio/athan1.wav 

나는 아래의 코드를하려하지만 아무것도 재생되지 않는 프롬프트 명령에서 WAV 파일을 재생! 내 자바 프로그램에서

ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "aplay ~/javafx/examples/PrayerTime/src/Audio/athan1.wav"); 
try { 
Process process = processBuilder.start(); 
} catch (IOException ex) { 
Logger.getLogger(JavaFXApplication4.class.getName()).log(Level.SEVERE, null, ex); 
} 
+3

1) * "응답을 읽는 데 지나치게 귀찮게하지 않습니다."* 문제의 원인 일 수 있습니다. Runtime.exec()이 (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html) 할 때의 권장 사항을 모두 읽고 (구현하고) 구현하십시오. 그게 문제를 해결할 수도 있습니다. 그렇지 않은 경우 실패한 이유에 대한 자세한 정보를 제공해야합니다. 그런 다음'exec'을 참조하고 (계속)'ProcessBuilder'를 사용하여'Process'를 빌드한다는 것을 무시하십시오. 2) '프로세스'사용은 일반적으로 플랫폼에 따라 다릅니다. 크로스 플랫폼 솔루션에는 [Java Sound] (http://stackoverflow.com/tags/javasound/info) API를 사용하십시오. –

답변

0

Andrew는 절대적으로 옳았습니다. 출력을 무시하고 쓰는 것은 문제의 핵심입니다.

processBuilder.start()을 통해 프로세스를 시작하면 기본적으로 자신의 수명이 인 다른 프로세스 을 시작합니다. 그것은 불이고 잊어 버린다. 던져진 예외를 통해 얻을 수있는 유일한 피드백은 실제 의 승락이 성공하지 못한 경우입니다. 그것은 시작된 프로세스가 성공했는지 여부에 대해서는 아무 것도 말하지 않습니다.

오류 메시지가 표시되지 않으므로 프로세스가 시작되었습니다.

이제 aplay~을 사용하면 Unix와 같은 Linux를 사용하고있는 것 같습니다. 프로세스가 표준 출력을 표준 출력 스트림에 출력하고 오류 출력을 표준 오류 스트림에 출력합니다. 또한 일이 원활하게 진행되었는지 여부를 나타내는 종료 코드를 반환합니다. 종료 코드 (waitFor()을 사용하여 process 개체에서 얻을 수 있음)와 오류 스트림 (process 개체에서도 사용할 수 있음)은 프로세스가 성공했는지 여부에 상관없이 필요한 모든 정보를 제공합니다.

모든 말로, 최소한 오류없이 프로세스를 호출하는 방법을 알기 전까지 적어도 Runtime.exec()을 사용하기를 원할 수도 있습니다.