2012-07-31 101 views
1

我有一個在Mac和Windows上運行的Java應用程序。我在用戶按「退出」按鈕時撥打System.exit(0)。該應用程序在Win7上運行良好。但在Mac上,按下「退出」按鈕後,程序無法退出。沒有應用程序的迴應。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版本? – 2012-07-31 07:26:11

回答

1

我認爲你是與桂混合的非圖形用戶界面的工作。

2.我希望你能保持你的Event Dispatcher Thread僅GUI目的,沒有別的,如果你還沒有嘗試this..and然後嘗試做...

public static void main(String[] args){ 

     EventQueue.invokeLater(new Runnable(){ 

       public void run(){ 


         myframe.setVisible(); 

        } 


      }); 


    } 
0

我除了Kumar Vivek Mitra的回答外,你還可以這樣做:

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

0

進行線程轉儲以查看哪些線程阻塞退出。 爲此,請打開命令提示符,然後執行ps -eaf | grep java。 找到你的pid並且做,殺3次-3。

你應該得到一個線程轉儲,看看哪個線程被阻塞。 REgards Philippe