1

我有一个在 Mac 和 Windows 上运行的 Java 应用程序。我呼吁System.exit(0)用户按下“退出”按钮。该应用程序在 Win7 上运行良好。但在 Mac 上,按“退出”按钮后,程序无法退出。应用程序没有响应。

根据活动监视器,所有用户线程都已终止。我不知道程序在等什么。

我无法粘贴 Activity Monitor 的整个输出,但这里是一个示例:</p>

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]'  
4

3 回答 3

1

1.我认为您将非 Gui 工作与 Gui 混合在一起。

2.我希望你只保留你Event Dispatcher Thread 的GUI目的,如果你还没有尝试过这个......然后尝试去做......

public static void main(String[] args){

        EventQueue.invokeLater(new Runnable(){

               public void run(){


                      myframe.setVisible();

                   }


          });


   }
于 2012-07-31T07:25:30.387 回答
0

进行线程转储以查看哪些线程正在阻塞退出。为此,请打开命令提示符,然后执行 ps -eaf | grep 爪哇。找到你的 pid 并执行,杀死 -3 3 次。

您应该得到一个线程转储并查看哪个线程正在阻塞。问候菲利普

于 2012-07-31T07:41:55.963 回答
0

我认为您正在使用swing JFrame,除了Kumar Vivek Mitra的回答,要退出,您还可以这样做:

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

于 2012-07-31T07:26:06.097 回答