2014-07-22 2 views
1

1 응용 프로그램스윙 응용 프로그램은 파일을

스윙 클라이언트를 작성하는 것을 방지합니다. 제공된 URI는 웹 서비스의 URL입니다. 제출시 클라이언트는 매개 변수로 URI를 사용하여 WebService Client를 실행합니다. 병이 클라이언트에 의해 제공 requestURI 동의 주요 방법 이외에는 공개 방법이 없다 같이 웹 서비스 클라이언트를 실행

,

String command = "java -jar EncryptToken.jar " + requestURI; 
Runtime.getRuntime().exec(command); 

.

2 응용 프로그램

WebService에 클라이언트 :이 서버에서 호스팅되는 웹 서비스를 호출하는 데 사용되는 웹 서비스 클라이언트입니다.

디 컴파일 된 코드에서 콘솔 출력을 로거 파일에 기록하기위한 아래 코드가 있습니다.

OutputStream outStream = System.out; 
    try{ 
     OutputStream os = new FileOutputStream("EncryptToken.log", false); // only the file output stream 
     TeeOutputStream tos = new TeeOutputStream(outStream, os); // create a TeeOutputStream that duplicates data to outStream and os 
     PrintStream fileStream = new PrintStream(tos); 
     System.setErr(fileStream);  
     System.setOut(fileStream); 
    }catch(FileNotFoundException ex){ 
     out.println("[Golden Client] Log file create Exception = " + ex.toString()); 
     return false; 
    } 

내가 명령 자바를 실행 질문 터미널 또는 창 명령 줄을 통해 -jar EncryptToken.jar http://example.org/GCWS/YesWS.

명령이 성공적으로 실행되고 콘솔 출력이 파일에 기록되며 파일 크기는 70-90KB 사이입니다.

그러나 스윙 클라이언트에서 동일한 명령을 실행하려고하면 명령이 실행되지만 로그 파일은 먼저 1KB로 초기화 된 다음 5KB로 이동 한 다음 고정됩니다. 5KB 로그에는 종결되지 않은 xml이 들어 있습니다. 스윙 클라이언트를 닫으면 콘솔 출력의 나머지 부분이 로그 파일에 추가됩니다.

저는 Swing Client에서 파일을 읽거나 쓰려고하지 않습니다. Swing Client에는 System.out 또는 System.err 문이 없습니다.

나는 exect 근본 원인을 알아낼 수 없습니다. 도와주세요.

+1

[Runtime.exec()이 실행되지 않을 때]의 모든 권장 사항을 읽고 구현하십시오 (http://www.javaworld.com/article/2071275/core-java/when-runtime-exec--- won-t.html). 그렇다면'exec (..)'를 참조하고'ProcessBuilder'를 사용하여'Process'를 빌드하십시오.또한'String args'를 공백을 포함하는 인수를 설명하기 위해'String [] args'로 나눕니다. –

답변

0

모든 출력 스트림과 파일이 닫혀 있는지 확인하십시오.

이러한 스트림은 버퍼로 작동합니다. 당신이 그 (것)를 작성하는 경우 그것은 정말 디스크에 기록되지 않는 :

  • 큐는
  • 당신이 그것을 쓰는 강제로 스트림에() 플러시 전화 (몇 킬로바이트 주위 등) 가득 인 - 메모리
  • 에서 당신은 커맨드 라인에서 일하는 것 같다 그 이유는, (또한 보류중인 모든 데이터를 작성하는 강제) 스트림 JVM이 정지

, 그것은 모든 거즈를 닫 시도를 닫습니다. 스윙 앱에서 시작할 때 스윙 앱을 중지 할 때까지 JVM이 중지되지 않으므로 파일의 일부가 디스크에 기록되지 않은 것처럼 보입니다.

관련 문제