[問題] 為什麼呼叫dispose()後java程式沒有結束?
我對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
10/15 20:48, 1F
→
10/15 21:16, , 2F
10/15 21:16, 2F
→
10/15 23:35, , 3F
10/15 23:35, 3F