作者lausai (恨怨悲苦憎怒嗔)
看板java
标题[问题] 为什麽呼叫dispose()後java程式没有结束?
时间Fri Oct 15 20:41:40 2010
我对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
1F:→ qrtt1:用 jconsole 看一下, 是哪一个 thread 还活着. 10/15 20:48
2F:→ lausai:谢谢楼上 结果发现所有thread都活着 而且有18个之多= = 10/15 21:16