记事本的打开和保存功能问题,出错了。求帮忙看看
程序代码:/**
* 功能:记事本
*/
package com.test4;
import javax.swing.*;
import java.awt.event.*;
import *;
public class Note {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
NotePad np=new NotePad();
}
}
class NotePad extends JFrame implements ActionListener{
JTextArea jta=null;
JMenuBar jmb=null;
JMenu jm1=null;
JMenuItem jmi1=null;
JMenuItem jmi2=null;
public NotePad(){
//创建文本域
jta=new JTextArea();
jmb=new JMenuBar();
jm1=new JMenu("文件");
jm1.setMnemonic('F');
jmi1=new JMenuItem("打开(O)");
jmi2=new JMenuItem("保存(S)");
this.add(jta);
this.setJMenuBar(jmb);
jmb.add(jm1);
jm1.add(jmi1);
jm1.add(jmi2);
//注册监听
jmi1.addActionListener(this);
jmi2.addActionListener(this);
//设置命令识别字符
jmi1.setActionCommand("open");
jmi2.setActionCommand("save");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 600);
this.setLocation(300, 100);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("open")){
//重要的文件组件JFileChooser
JFileChooser jfc1=new JFileChooser();
//设置名字
jfc1.setDialogTitle("请选择文件");
//默认方式
jfc1.showOpenDialog(null);
//显示
jfc1.setVisible(true);
//得到用户选择的文件的全路径
String filename=jfc1.getSelectedFile().getAbsolutePath();
// System.out.println(filename);
//把文件的字符输到文本区域
FileReader fr=null;
BufferedReader br=null;
try {
fr=new FileReader(filename);
br=new BufferedReader(fr);
//读取文件信息
String s="";
String alls="";
while((s=br.readLine())!=null){
alls+=s+"\r\n";
}
//放置到JTextArea中
jta.setText(alls);
} catch (Exception e1) {
e1.printStackTrace();
// TODO: handle exception
}finally{
try {
fr.close();
br.close();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
}
else if(e.getActionCommand().equals("save")){
JFileChooser jfc2=new JFileChooser();
jfc2.setDialogTitle("另存为");
jfc2.showSaveDialog(null);//与打开不同
jfc2.setVisible(true);
//取得希望文件保存在何方,文件的全路径
String filename2=jfc2.getSelectedFile().getAbsolutePath();
//准备写入到指定文件
FileWriter fw=null;
BufferedWriter bw=null;
try {
fw=new FileWriter(filename2);
bw=new BufferedWriter(fw);
bw.write(this.jta.getText());
bw.flush();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}finally{
try {
fw.close();
bw.close();
} catch (Exception e3) {
// TODO: handle exception
e3.printStackTrace();
}
}
}
}
}运行时,点击文件-打开,然后出错了Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Could not get shell folder ID list
at sun.awt.shell.Win32ShellFolderManager2$ComInvoker.invoke(Win32ShellFolderManager2.java:506)
at sun.awt.shell.Win32ShellFolder2.getFileSystemPath(Win32ShellFolder2.java:563)
at sun.awt.shell.Win32ShellFolderManager2.getPersonal(Win32ShellFolderManager2.java:137)
at sun.awt.shell.Win32ShellFolderManager2.get(Win32ShellFolderManager2.java:182)
at sun.awt.shell.ShellFolder.get(ShellFolder.java:219)
at javax.swing.filechooser.FileSystemView.getDefaultDirectory(FileSystemView.java:391)
at javax.swing.JFileChooser.setCurrentDirectory(JFileChooser.java:552)
at javax.swing.JFileChooser.<init>(JFileChooser.java:334)
at javax.swing.JFileChooser.<init>(JFileChooser.java:286)
at com.test4.NotePad.actionPerformed(Note.java:64)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)
at java.(Component.java:6216)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.(Component.java:5981)
at java.awt.Container.processEvent(Container.java:2041)
at java.(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: Could not get shell folder ID list
at sun.awt.shell.Win32ShellFolder2.getFileSystemPath0(Native Method)
at sun.awt.shell.Win32ShellFolder2.access$900(Win32ShellFolder2.java:55)
at sun.awt.shell.Win32ShellFolder2$8.call(Win32ShellFolder2.java:565)
at sun.awt.shell.Win32ShellFolder2$8.call(Win32ShellFolder2.java:563)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Win32ShellFolderManager2.java:458)
at java.lang.Thread.run(Thread.java:619)
[ 本帖最后由 panlanghao 于 2013-6-11 16:06 编辑 ]







