2013-05-07 63 views
1

我創建的EXCUTE一些操作時,窗體關閉鉤:表格不要關閉Java應用程序消失

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 
     public void run() { 
      System.out.println("In shutdown hook"); 
      String dataCrittare = "lgt%"; 
      Date now=new Date(); 
      SimpleDateFormat dateformat = new SimpleDateFormat ("yyyyMMdd-HHmm"); 
      writer.println(dateformat.format(now)); 
      writer.flush(); 
      System.out.println("arrived?"); 
      dispose(); 
      System.exit(1); 

     } 
    }, "Shutdown-thread")); 

看來,程序退出,但仍受阻屏幕上的形式,和我必須殘酷地關閉它。 任何人都知道爲什麼窗體不會消失?謝謝

+0

我讀過。沒有程序仍然無法正常工作..和代碼 Frame.getFrames()。length 返回給我2幀仍然工作(這是我想關閉的是在我的應用程序中打開的第二種形式),但我不知道如何正確關閉該窗體.. – user2312976 2013-05-07 17:30:18

回答

0

當調用System.exit()時,關閉鉤子被調用。由於JVM 已經開始終止,因此您不應該在關閉鉤子中調用System.exit()。在addShutdownHook()內部,調用System.exit()Shutdown.exit()(這是從System.exit()調用)的死鎖。即使有評論說:

 /* Synchronize on the class object, causing any other thread 
     * that attempts to initiate shutdown to stall indefinitely 
     */ 

您的關機掛鉤不會在表單關閉時被調用!(除了你有一些JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE)左右。)

+0

我有 JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE); 我試圖解決,但我的解決方案仍然無法正常工作。你有任何示例代碼可以幫助我嗎? – user2312976 2013-05-07 17:45:25

+0

請提供一些細節。你的關機鉤是否被執行過?發佈一些最小但完整的示例。 – fjf2002 2013-05-07 17:50:01