[問題] 為什麼呼叫dispose()後java程式沒有結束?

看板java作者 (恨怨悲苦憎怒嗔)時間13年前 (2010/10/15 20:41), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串1/1
我對java沒有什麼經驗 最近從良葛格的網站上看了他的文字編輯器撰寫教學 自己打了一遍 卻發現在一個狀況下程式呼叫了 dispose() 但卻沒有結束 以下提供一些原始碼的片段供大家了解 private void setupEventListener() { setFileMenuListener(); setEditMenuListener(); setTextAreaEventListener(); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeFile(); } } ); } 在以上這段 code 讓文字編輯器在關閉時呼叫 closeFile 函式 private void saveFile() { File f = new File(getTitle()); //從標題列取得檔案名稱 if (f.exists()) { //儲存檔案 try { BufferedWriter buf = new BufferedWriter(new FileWriter(f)); buf.write(text.getText()); buf.close(); state_bar.setText("未修改"); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "寫入檔案失敗", JOptionPane.ERROR_MESSAGE); } } else { //檔案不存在則做另存新檔的動作 saveFileAs(); } } private void saveFileAs() { JFileChooser file_chooser = new JFileChooser(); int option = file_chooser.showDialog(null, null); if (option == JFileChooser.APPROVE_OPTION) { File f = file_chooser.getSelectedFile(); setTitle(f.toString()); try { //建立新檔案 f.createNewFile(); saveFile(); } catch (IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "無法建立新檔", JOptionPane.ERROR_MESSAGE); } } } private void closeFile() { if (isCurFileSaved()) { //若是檔案已儲存 釋放資源 dispose(); } else { int option = JOptionPane.showConfirmDialog(null, "檔案已修改, 是否儲存?", "儲存檔案?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { case JOptionPane.YES_OPTION: saveFile(); //problem occur here!!! dispose(); break; case JOptionPane.NO_OPTION: dispose(); break; } } 大概敘述一下程式以及發生問題的狀況 我只有一個 主要的 notepadUI Class 繼承 JFrame 當我啟動程式 隨便打了一些字然後關閉文字編輯器 因為內容沒有儲存 所以跳出視窗讓我選擇是否存檔 等我存檔後文字編輯器視窗會自動關掉 也就是執行到上面 //problem occur here!!! 然後呼叫 dispose() 視窗是消失了 但是程式還在跑 沒有結束 我上網查了一下 java GUI 程式最後一個視窗呼叫 dispose 之後程式就會結束了 除非還有某個 thread 還在執行 但這個程式很簡單 我沒有 create 任何 thread 請問有人知道為什麼會這樣嗎? p.s.因為整個程式300多行怕po出來太長 如果有需要我再補上 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.119.227

10/15 20:48, , 1F
用 jconsole 看一下, 是哪一個 thread 還活著.
10/15 20:48, 1F

10/15 21:16, , 2F
謝謝樓上 結果發現所有thread都活著 而且有18個之多= =
10/15 21:16, 2F

10/15 23:35, , 3F
10/15 23:35, 3F
文章代碼(AID): #1Ck4m7HR (java)