2012-07-31 2 views
1
을 호출 할 때 종료되지 않습니다.

Java 응용 프로그램이 Mac 및 Windows에서 실행됩니다. 사용자가 "exit"버튼을 눌러 System.exit(0)으로 전화합니다. 이 응용 프로그램은 Win7에서 잘 작동합니다. 하지만 Mac에서는 "exit"버튼을 누르면 프로그램을 종료 할 수 없습니다. 응용 프로그램의 응답이 없습니다.Java 응용 프로그램이 System.exit (0)

활동 모니터에 따르면 모든 사용자 스레드가 종료됩니다. 프로그램이 무엇을 기다리는 지 모르겠습니다.

851 Thread_435381: Java: Exception Handler Thread 
851 Thread_435386: Java: Gang worker#0 (Parallel GC Threads) 
851 Thread_435493 
851 thread_start (in libsystem_c.dylib) + 34 [0x92abd6de] 
851 _pthread_start (in libsystem_c.dylib) + 335 [0x92ab9ed9] 
851 CAPThread::Entry(CAPThread*) (in CoreMediaIO) + 123 [0x9a5e3a3d] 
851 CMIO::DAL::RunLoop::OwnThread(void*) (in CoreMediaIO) + 160 [0x9a5eded2] 
851 CFRunLoopRunInMode (in CoreFoundation) + 120 [0x9329c328] 
851 CFRunLoopRunSpecific (in CoreFoundation) + 332 [0x9329c47c] 
851 __CFRunLoopRun (in CoreFoundation) + 1428 [0x9329cda4] 
851 __CFRunLoopServiceMachPort (in CoreFoundation) + 170 [0x93293c7a] 
851 mach_msg (in libsystem_kernel.dylib) + 70 [0x942601f6] 
851 mach_msg_trap (in libsystem_kernel.dylib) + 10 [0x94260c22]' 
+0

모든 시스템에서 System.exit()이 버그처럼 작동하여 시스템을 종료해야합니다. 어떤 버전의 Java와 OS 버전이 있습니까? –

답변

1

1 난 당신이 GUI를 사용하여 비 GUI 작업을 혼합 생각 :

여기 활동 모니터의 전체 결과를 붙여 could't,하지만 예입니다. 당신이 그것을 수행하려고 this..and 다음 시도를 havent 경우

2 나는 ... 당신은 단지 GUI 목적 및 다른 아무것도 당신의 Event Dispatcher Thread를 유지 한

public static void main(String[] args){ 

     EventQueue.invokeLater(new Runnable(){ 

       public void run(){ 


         myframe.setVisible(); 

        } 


      }); 


    } 
0

I 희망 스윙 JFrame을 사용하여 Kumar Vivek Mitra의 답변 외에도 종료했다고 생각하면 다음을 수행 할 수 있습니다.

jFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

0

스레드 덤프를 만들어 출구를 차단하고있는 스레드를 확인하십시오. 이렇게하려면 명령 프롬프트를 열고 ps -eaf | grep java. 당신의 PID를 찾아 -3 번 3 번 죽이십시오.

스레드 덤프를 가져와 차단중인 스레드를 확인해야합니다. REgards Philippe

관련 문제