2015-01-30 4 views
0

저는 탭 방식으로 여러 콘솔 세션 (cmd.exe가 될 윈도우에서)을 열 수있는 앱을 코딩하려고했습니다.전체 Console Java 애플리케이션에서 Runtime.exec()를 사용 하시겠습니까?

내가 발견 한 가장 중요한 참조 중 하나는 TextAreaOutputStream 코드를 사용하여 프로세스의 표준 출력을 읽을 수있는 다음 URL에있는 것입니다.하지만 인터넷을 통한 대부분의 참조는 않습니다. 해결하지/해결할 문제가 없습니다.

은 참조하십시오 STDOUT, STDERR을 리디렉션 및 STDIN 나에게 어떤 문제가 발생하더라도 명령을 사용하면 탭 중 하나에 Java 콘솔에서 입력 할 때, 최악의 부분은 제공Create Java console inside a GUI panel

가 생성하는 명령을 실행 하위 프로세스인데, 백그라운드에서 새 프로세스가 작성 되었기 때문에 Java 애플리케이션이 제어를 잃을 때가 여기에 있습니다. 기본적으로 새로운 자식 프로세스가 바운드되어 바이트를 받거나 보낼 수 없으며 응용 프로그램이 중단됩니다. JVM

  • MyTabbedConsoleApp
    • CMD.EXE/K (I 여전히 문제없이 현재까지이 하나와 통신 할 수있다)
      • apptrack

        • .exe 내가 그 꽤 응용 프로그램을 만들기 위해 더 나은 방법을 찾고 있어요

(내 앱이와의 통신에서 바운드 아웃 자식 프로세스는 응용 프로그램이 중단됩니다) 콘솔 환경을 많이 모방합니다.

+0

포럼 사이트와 달리 "감사"또는 "모든 도움을 주셨습니다"또는 [so]의 서명은 사용하지 않습니다. "[안녕하세요, '고마워,'태그 라인 및 인사말을 게시물에서 삭제해야합니까?] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be 참조) "감사합니다."가 아니라 "미리 감사드립니다." –

답변

0

운영 체제 프로세스 처리에 권장되는 API이므로 Runtime 대신 ProcessBuilder을 사용해야합니다.

Java 6u45 릴리스 정보에 대한 내용은 Changes to Runtime.exec을 확인하십시오.

JDK 5.0이 java.lang.ProcessBuilder를 사용하고 있기 때문에 운영 체제 프로세스를 생성하는 가장 좋은 방법입니다. ProcessBuilder 클래스는 환경 설정, 작업 디렉토리 에 대한 훨씬 더 완벽한 API와 프로세스 스트림을 리디렉션합니다.

+0

ProcessBuilder가 파이프 리디렉션을 지원하는지 알고 있습니까? 메인 프로세스가 실행되거나 내부에 다른 콘솔이나 하위 프로세스가 생성되는 경우 (중첩 프로세스). Runtime.exec의 주요 문제점은 mi 프로세스가 다른 서브 프로세스를 작성한 경우 기본 프로세스가 서브 프로세스를 undefinitelly 기다리는 중이었고 서브 프로세스에서 stdout 정보가 없다는 것입니다. – mat060

+0

@ mat060 그것에 대해 모르겠다. 별도의 질문을해야한다. – BonanzaOne

관련 문제