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 | を実行します。グレップジャバ。pid を見つけて , kill -3 を 3 回実行します。

スレッド ダンプを取得し、ブロックしているスレッドを確認する必要があります。よろしくフィリップ

于 2012-07-31T07:41:55.963 に答える
0

Kumar Vivek Mitraの答えに加えて、swing JFrameを使用して終了すると思います。これを行うこともできます:

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

于 2012-07-31T07:26:06.097 に答える