2009-10-01 2 views
3

가능한 중복 :
Is there a way to the hide win32 launch console from a Java program (if possible without JNI)분리 자바 응용 프로그램

나는 창문에 배치 파일 내 자바 스윙 응용 프로그램을 실행, 콘솔/명령 창이 동안 열려 내 Java 응용 프로그램이 실행 중입니다. 이것은 내가 갖고 싶지 않은 작업 표시 줄에 여분의 창을 만듭니다. 그러나 명령 창을 닫으면 Java 응용 프로그램이 중지됩니다. 배치 파일이나 명령 줄 매개 변수 또는 응용 프로그램의 코드 변경을 통해 응용 프로그램이 계속 실행되는 동안 내 스윙 응용 프로그램과 콘솔 창을 닫은 후에 java.exe를 종료하는 방법이 있습니까?

public static void main(String args[]) { 

    ApplContext applContext = new ApplContext(); 
    Throwable error = null; 

    try { 
     applContext.setUserConfigDir(args.length>0 ? args[0] : null); 
     applContext.loadData(); 
     ApplTools.initLookAndFeel(Parameters.P_NIMBUS_LAF.of(applContext.getParameters())); 
    } catch (Throwable e) { 
     error = e; 
    } 

    // JWorkSheet is a JFrame. 
    new JWorkSheet(applContext, error).setVisible(); 
}  
+0

코드 스 니펫을 참조하십시오. 바람직하게는 주요 방법. – jjnguy

+0

또한 확인해보십시오. http://stackoverflow.com/questions/649634/how-do-i-run-a-bat-file-in-the-background-from-another-bat-file – daveb

+0

이것은 dup이 질문 : http://stackoverflow.com/questions/264687/is-there-a-way-to-the-hide-win32-launch-console-from-a-java-program-if-posable –

답변

6

javaw.exe보다는 자바와 응용 프로그램을 실행합니다.

이 모드에서 실행
> start javaw.exe -jar myapp.jar 

, 그것은 적절한 로깅을 설정하는 좋은 생각이다 또는 적어도 당신의 출력 스트림 당신이 경우 리디렉션 : 당신은 박쥐 파일에서 실행중인 경우, start 명령과 함께 이것을 사용 모든 디버깅을 위해 콘솔에 의존합니다. 예를 들어 콘솔이 없으면 처리되지 않은 예외에 대해 인쇄 된 친숙한 스택 추적을 볼 수 없습니다.

참고 : java.exe은 Windows 콘솔 응용 프로그램입니다. 따라서 시작되는 방법이나 실행중인 스레드에 상관없이 콘솔이 할당됩니다. 이것은 javaw.exe이 존재하는 이유입니다.

+0

GUI가 처음에는 주 스레드와 결합되지 않아야합니다. – jjnguy

+0

전적으로 동의하지만, UI가 메인 쓰레드 나 UI 쓰레드에서 초기화되는지 여부는 콘솔이 자바 프로세스를 위해 생성되고 유지되는지 여부에 영향을 미치지 않습니다. –

1

이상적으로 당신이 결국 코드에서 어딘가에 할 것입니다 것은 전화 SwingUtilities.invokeLater(Runnable r)입니다 다음과 같이

홈페이지 방법이다. 그러면 GUI 코드가 올바른 스레드로 전달되고 주 스레드가 종료 된 후에 명령 줄을 닫을 수 있어야합니다.

이 내가 무슨 말을의 기본적인 예입니다

public static void main(String[] args){ 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run(){ 
      JFrame yourWindow = new YourFrame(); 
      yourWindow.createAndShow(); 
     } 
    } 
} 
+1

이것이 스윙 UI를 초기화하는 올바른 방법이지만 메인 스레드가 종료되면 콘솔이 사라지지 않습니다. 프로세스의 마지막 비 데몬 스레드가 종료 될 때인 java.exe가 종료 될 때까지 남아 있습니다. –

+0

주 스레드가 종료 된 후 콘솔 창을 닫을 수 있습니다. 내가 생각하기에 다른 창문을 가지고있는 문제를 둘러싼 다른 방법입니다. – jjnguy

관련 문제