我在Mac和Windows上都运行了Java应用程序。我在用户按“退出”按钮时调用System.exit(0)
。该应用程序在Win7上运行良好。但在Mac上,按“退出”按钮后,程序无法退出。该申请没有回复。
根据活动监视器,所有用户线程都被终止。我不知道该节目在等什么。
我无法粘贴Activity Monitor的整个输出,但这是一个例子:
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 :(得分:1)
1。我认为你将你的非Gui作品与Gui混合。
2。我希望您保留Event Dispatcher Thread
仅用于GUI目的,而不是其他任何内容,如果你还没试过......然后尝试做它...
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
myframe.setVisible();
}
});
}
答案 1 :(得分:0)
我认为你使用swing JFrame,除了Kumar Vivek Mitra的回答,要退出,你也可以这样做:
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
答案 2 :(得分:0)
进行线程转储以查看哪些线程阻止退出。 为此,请打开命令提示符,然后执行ps -eaf | grep java。 找到你的pid并做,杀死-3次。
您应该获得一个Thread转储并查看阻塞的线程。 问候 菲利普