2009-07-29 4 views
4

Java에서 약간의 명령 행 응용 프로그램을 작성했으며이를 위해 새로운 클래스 java.io.Console을 사용하려고했습니다. System.console()을 사용하여이 클래스의 인스턴스를 가져옵니다. 이 호출은 'java -jar MyApp.jar'를 통해 응용 프로그램을 호출하면 작업 콘솔을 반환하지만 ant의 java-task를 통해 응용 프로그램을 실행하면 설정되지 않습니다. 이 호출에 대해 fork가 true이고 spwan false입니다. 이 차이점은 (System.out.print()가 ant에서 잘 작동하는 이유는 무엇입니까?) 개미를 통해 내 앱을 시작하면 어떻게 콘솔을 사용할 수 있습니까? this method 상태에 대한Java에서 실행되면 System.console()이 설정되는 이유와 개미를 통해 실행될 경우 설정 해제되는 이유는 무엇입니까?

+2

나는 이맥스에서 이런 종류의 프로그램을 시작할 때 같은 문제를 발견했다. –

답변

7

Javadoc을 : 어떤 경우

는, 현재의 Java 가상 머신과 관련된 고유 콘솔 오브젝트를 돌려줍니다.

그리고 System.Console 클래스 상태에 대한 문서 :

가상 시스템이 콘솔이되는지는 기본 플랫폼에 따라 또한 가상 머신이 호출되는 방식에 따라 달라집니다. 가상 컴퓨터가 표준 입력 및 출력 스트림을 리디렉션하지 않고 대화 형 명령 줄에서 시작되면 해당 콘솔이 존재하며 일반적으로 가상 컴퓨터가 시작된 키보드 및 디스플레이에 연결됩니다. 백그라운드 작업 스케줄러와 같이 가상 시스템이 자동으로 시작되면 일반적으로 콘솔이 없습니다.

Ant가 새 Java 프로세스를 포크 (fork)하면 표준 출력을 리디렉션한다고 상상합니다.

+0

그렇다면'System.Console'이 실제로 어떤 경우에 유용할까요? 사용자가 스트림을 리디렉션하지 않는다고 기대할 수는 없습니다. –

+0

일부 유형의 저주와 유사한 동작을 수행하는 경우 콘솔에 대한 읽기/쓰기 기능을 원하는 경우가 있습니다. 나는 그것이 null인지 확인하고 출력이 리디렉션되는 경우 다른 유형의 동작으로 분기하도록하려는 것이 좋습니다. –

+0

btw, 내가 "curses-like behavior"라고 말했을 때 : http://en.wikipedia.org/wiki/Curses_(programming_library) 및 http://en.wikipedia.org/wiki/Ncurses –

2

입력 또는 출력이 리디렉션되는 경우 System.console()이 null을 반환합니다. 개미가 그렇게합니다.

1

글쎄, 개미는 빌드 자동화 도구입니다. 대개 대화식 응용 프로그램은 빌드 자동화 내에서 거의 자리 매김이 없으므로 개미를 통해 작업을 실행할 때 콘솔을 얻지 못하는 것은 전혀 예상하지 못합니다.

0

개미 자바 작업이 java.exe 대신 javaw.exe를 사용하고있는 것처럼 보입니다. javaw에는 콘솔이 연결되어 있지 않습니다.

관련 문제