黑马程序员技术交流社区

标题: 关于GUI模拟记事本的问题 [打印本页]

作者: 梁清平    时间: 2012-6-14 17:44
标题: 关于GUI模拟记事本的问题
下面这个程序实现了一个简单的GUI视图,模拟一个记事本软件。
问题是这样的:我知道这个软件是打不开媒体文件的,因为用到的是字符读取流,并且也无法解码媒体;
但是,我们还是可以用记事本打开一个媒体文件的,当然显示乱码。是的。。这个模拟程序在打开图片里也会显
示乱码,可是它却是一直在输出乱码,好像一个死循环。大家可以试着运行打开一个图片。。请高手指教出现这种情况的原因。。。

这是我写的代码:
package babynotebook;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyMenuDemo
{
        private Frame f;
        private MenuBar bar;
        private Menu fileMenu,m2;
        private MenuItem mi,mi1,mi2,mi3,mi4;
        private FileDialog openDia,saveDia;
        private TextArea ta;
        private File file;
       
        MyMenuDemo()
        {
                init();
        }
        private void init()
        {
                f = new Frame("属于你的日记本。。。");
                ta = new TextArea();
                openDia = new FileDialog(f,"亲想打开哪段啊?",FileDialog.LOAD);
                saveDia = new FileDialog(f,"亲写完了?",FileDialog.SAVE);
                bar = new MenuBar();
                fileMenu = new Menu("文件");
                m2 = new Menu("新建");
                mi1 = new MenuItem("文本文件");
                mi2 = new MenuItem("打开");
                mi3 = new MenuItem("保存");
                mi4 = new MenuItem("另存为");
               
                mi = new MenuItem("退出");
                f.setBounds(15,70,600,600);
                f.setMenuBar(bar);
                //f.setLayout(new FlowLayout());
                f.setVisible(true);
                bar.add(fileMenu);
                fileMenu.add(m2);
                m2.add(mi1);
                fileMenu.add(mi2);
                fileMenu.add(mi3);
                fileMenu.add(mi4);
                fileMenu.add(mi);
                f.add(ta);
               
                myEvent();
               
        }
        private void myEvent()
        {
                mi2.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent e)
                        {
                                openDia.setVisible(true);
                                String dirPath = openDia.getDirectory();
                                String fileName = openDia.getFile();
                                if(dirPath==null||fileName==null)
                                        return;
                                ta.setText("");
                                file = new File(dirPath,fileName);
                                try
                                {
                                        BufferedReader bufr = new BufferedReader(new FileReader(file));
                                        String line = null;
                                        while((line=bufr.readLine())!=null)
                                        {
                                                ta.append(line+"\r\n");
                                               
                                        }
                                        bufr.close();
                                }
                                catch(IOException e1)
                                {
                                        throw new RuntimeException("读取失败!");
                                }
                               
                               
                        }
                });
                mi3.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent e)
                        {
                                if(file==null)
                                {
                                saveDia.setVisible(true);
                                String dirPath = saveDia.getDirectory();
                                String fileName = saveDia.getFile();
                                if(dirPath==null||fileName==null)
                                        return;
                                file = new File(dirPath,fileName);
                                }
                                try
                                {
                                        BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
                                        String text = ta.getText();
                                        bufw.write(text);
                                        bufw.close();
                                }
                                catch(IOException e2)
                                {
                                        throw new RuntimeException("保存失败!");
                                }
                        }
                });
                mi.addActionListener(new ActionListener()
                {
                        public void actionPerformed(ActionEvent e)
                        {
                                System.exit(0);
                        }
                });
                f.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.exit(0);
                        }
                });
        }
        public static void main(String[] args)
        {
                new MyMenuDemo();
        }
}
作者: 晏文根    时间: 2012-6-14 19:05
我运行了下,并没有出现你说的无限循环的现象(我是以jpg,gif两种主流格式为例):两次都会停止。

作者: 姚玉鹏    时间: 2012-6-14 19:37
貌似是楼主的图片太大  小的图片可以读完




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2