学习J两个月了,想写一个通讯录的程序,但是遇到了点麻烦,请个位帮忙!
问题:
    我的代码在编译的时候总是出现 
    unreported exception java.lang.Exception:must be caught or decleared to be thrown
    如果在对应的事件函数后面加上 throws Exception 以后有会出现:
    * cannot implemnt *(java.awt.event.*) (*指的是某个函数)
下面是我的源代码(未完成,有点乱),拜托大家帮帮忙!谢谢了!
顺便问一下,关于java的差错控制的机制是怎么样的?import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
public class Messagelist extends JFrame {
//  变量表预留空间//
private JMenuBar bar;
private JMenu creat,sear,dele,help;
private JMenuItem cGroup,cPerson,dGroup,dPerson,about,exit;
private JLabel name,sex,group,mNumber,pNumber,zip,addr,email,tip,qq;
private JButton updata,del,addTG;
private JComboBox sGroup;
private JList nameList;
private JPanel innerWest,panel1,panel2;
private JTextField nameField,sexField,groupField,mNumberField,pNumberField,
                   zipField,qqField,emailField;
private JTextArea tipArea,addrArea;
private String groupName,pName,pSex,pGroup,pmNumber,ppNumber,pZip,pAddr,pEmail,
               pTip,pQQ;
private GridLayout grid;
private RandomAccessFile gInfo,pInfo;
private Pocessor pocessor=new Pocessor();
private Record records[]=new Record[50];
private String nameString[]=new String[50];
    private int pastSelection=-1;
//private Icon updataI;
    public Messagelist()  throws Exception  //建立用户界面//
    {
     super("通讯录 v1.0");
     creat=new JMenu("新建");
     creat.setMnemonic('N');
     cGroup=new JMenuItem("通信组");
     cGroup.setMnemonic('G');
     cGroup.addActionListener(
     new ActionListener() {
     public void actionPerformed(ActionEvent E)
     {
     pocessor.addGroup();
     }
     }
     );
    
    
     cPerson=new JMenuItem("联系人");
     cPerson.setMnemonic('P');
     cPerson.addActionListener(
     new ActionListener() {
     public void actionPerformed(ActionEvent E)
     {
     pocessor.addPersonDialog();
     }
     }
     );
     exit=new JMenuItem("退出");
     exit.setMnemonic('X');
        exit.addActionListener(
         new ActionListener() {
         public void actionPerformed(ActionEvent E)
         {
         pocessor.exit();
             }
          }
        );
        
        
        creat.add(cGroup);
     creat.add(cPerson);
     creat.add(exit);
    
     sear=new JMenu("查找");
     sear.setMnemonic('S');
     sear.addActionListener(
     new ActionListener() {
     public void actionPerformed(ActionEvent E)
     {
     //sear();
     }
     }
     );
    
    
     dele=new JMenu("删除");
     dele.setMnemonic('D');
     dGroup=new JMenuItem("通讯组");
     dGroup.setMnemonic('R');
     dGroup.addActionListener(
     new ActionListener () {
     public void actionPerformed(ActionEvent E)
     {
     //deleGroup();
     }
     }
     );
     dPerson=new JMenuItem("联系人");
     dPerson.setMnemonic('E');
     dPerson.addActionListener(
     new ActionListener() {
     public void actionPerformed(ActionEvent E)
     {
     pocessor.delPerson();
     }
     }
     );
     dele.add(dGroup);
     dele.add(dPerson);
    
    
     help=new JMenu("帮助");
     about=new JMenuItem("关于");
     about.setMnemonic('A');
     about.addActionListener(
     new ActionListener() {
     public void actionPerformed(ActionEvent E)
     {
     JOptionPane.showMessageDialog(Messagelist.this,
     "制作人:破茧·化蝶","关于",JOptionPane.PLAIN_MESSAGE);
     }
     }
     );
     help.add(about);
    
    
     bar=new JMenuBar();
     setJMenuBar(bar);
     bar.add(creat);
     bar.add(sear);
     bar.add(dele);
     bar.add(help);
     //String groupName[]={"d","ddd","dddd"};
     sGroup=new JComboBox();
     sGroup.setBackground(Color.WHITE);
     sGroup.setMaximumRowCount(4);
     sGroup.addItemListener(
     new ItemListener() {
     public void itemStateChanged(ItemEvent I) 
     {
     pocessor.selectedGDisplay();
     }
     }
     );
    
     nameList=new JList();
     nameList.setFixedCellWidth(100);
     nameList.setVisibleRowCount(10);
     nameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     /*nameList.addListSelectionListener(
     new ListSelectionListener() {
     public void valueChanged(ListSelectionEvent L)
     {
     pocessor.selectedPDisplay();
     }
     }
     );*/
    
        innerWest=new JPanel();
        innerWest.setLayout(new BorderLayout());
     innerWest.add(sGroup,BorderLayout.NORTH);
     innerWest.add(new JScrollPane (nameList),BorderLayout.CENTER);
    
     name=new JLabel("姓  名",JLabel.LEFT);
     sex=new JLabel("性  别",JLabel.LEFT);
     group=new JLabel("组",JLabel.LEFT);
     mNumber=new JLabel("手  机",JLabel.LEFT);
     pNumber=new JLabel("电  话",JLabel.LEFT);
     email=new JLabel("Email",JLabel.LEFT);
     addr=new JLabel("地  址",JLabel.LEFT);
     zip=new JLabel("邮 编",JLabel.LEFT);
     tip=new JLabel("备  注(不超过100字)",JLabel.LEFT);
    
     nameField=new JTextField(6);
     sexField=new JTextField(2);
     groupField=new JTextField(6);
     //groupField.setText("作者");
     groupField.setEditable(false);
     mNumberField=new JTextField(21);
     pNumberField=new JTextField(21);
     emailField=new JTextField(21);
     addrArea=new JTextArea(2,21);
     addrArea.setLineWrap(true);
     zipField=new JTextField(7);
     tipArea=new JTextArea(3,25);
     tipArea.setLineWrap(true);
     //tipArea.setText("这是我的第一个java程序,虽然有些粗糙,但毕竟是自己写的,多多加油多多鼓励!!");
     qqField=new JTextField(10);
     qq=new JLabel("Q   Q");
     updata=new JButton("更新记录");
     //updata.setHorizontalAlignment(JButton.LEFT);
     //updataI=new ImageIcon("updata.gif");
     //updata.setIcon(updataI);
     del=new JButton("删除记录");
     addTG=new JButton("添加到组");
     addTG.setEnabled(false);
    
     panel1=new JPanel();
     panel1.setLayout(new FlowLayout(FlowLayout.LEFT,5,4));
     panel1.add(name);
     panel1.add(nameField);//6
     panel1.add(sex);
     panel1.add(sexField);//2
     panel1.add(group);
     panel1.add(groupField);//6
     panel1.add(mNumber);
     panel1.add(mNumberField);//18
     panel1.add(pNumber);
     panel1.add(pNumberField);//18
     panel1.add(addr);
     panel1.add(new JScrollPane (addrArea));//45
     panel1.add(qq);
     panel1.add(qqField);//12
     panel1.add(zip);
     panel1.add(zipField);//8
     panel1.add(email);
     panel1.add(emailField);//20
     panel1.add(tip);
     panel1.add(new JScrollPane (tipArea));//100
     panel1.setBackground(Color.WHITE);
    
     panel2=new JPanel();
     FlowLayout flow=new FlowLayout(FlowLayout.CENTER, 5,0);
     flow.setAlignment(FlowLayout.RIGHT);
     panel2.setLayout(flow);
     panel2.add(updata);
     panel2.add(del);
     panel2.add(addTG);
     panel2.setBackground(Color.white);
         
     Container mainWindow=getContentPane();
     mainWindow.add(innerWest,BorderLayout.WEST);
     mainWindow.add(panel1,BorderLayout.CENTER);
     mainWindow.add(panel2,BorderLayout.SOUTH);
     pocessor=new Pocessor();
     pocessor.loadGroup();    
     this.addWindowListener(
     new WindowAdapter(){
     public void windowClosing(WindowEvent w)
     {
     pocessor.savePerson(pastSelection);
     }
     }
         );
         setSize(392,336);
      this.setResizable(false);
      show();
    }
    

解决方案 »

  1.   

    接上贴
    private class Record{
         private String name,sex,group,mNumber,pNumber,zip,addr,email,tip,QQ;
         public void setName(String n)
         {
         name=n;
         }
         public String getName()
         {
         return name;
         } 
         public void setSex(String s)
         {
         sex=s;
         }
         public String getSex()
         {
         return sex;
         }
         public void setGroup(String g)
         {
         group=g;
         }
         public String getGroup()
         {
         return group;
         }
         public void setmNumber(String m)
         {
         mNumber=m;
         }
         public String getmNumber()
         {
         return mNumber;
         }
            public void setpNumber(String p)
            {
             pNumber=p;
            }
            public String getpNumber()
            {
             return pNumber;
            }
            public void setZip(String z)
            {
             zip=z;
            }
            public String getZip()
            {
             return zip;
            }
            public void setAddr(String a)
            {
             addr=a;
            }
            public String getAddr()
            {
             return addr;
            }
            public void setQQ(String q)
            {
             QQ=q;
            }
            public String getQQ()
            {
             return QQ;
            }
            public void setEmail(String e)
            {
             email=e;
            }
            public String getEmail()
            {
                return email;
            }
            public void setTip(String t)
            {
             tip=t;
            }
            public String getTip()
            {
             return tip;
            }
           
        }
      

  2.   

    接上贴
    private class Pocessor {
        
         public void loadGroup() throws Exception
           {
            File gRecord=new File("grecord");
            try{
               gInfo=new RandomAccessFile(gRecord,"rw");
               while(true)
               {
                        //groupName=new String("");
                    groupName=gInfo.readUTF();
                    sGroup.addItem(groupName);
               }
              }
            catch(EOFException eof){
             //gInfo.close();
              }
            catch(IOException err){
            JOptionPane.showMessageDialog(null,"加载发生错误","加载失败!"
           ,JOptionPane.ERROR_MESSAGE);
            }
            finally{
               gInfo.close();
            }
            File sys=new File("SysInfo");
            RandomAccessFile test=new RandomAccessFile(sys,"r");
            if(test.readInt()>0)
            {
                sGroup.setSelectedIndex(0);
                selectedGDisplay();
            }
            test.close();
            
            }
            public void selectedGDisplay() throws Exception
            {
             int bound,cout;
             bound=sGroup.getSelectedIndex();
             if(pastSelection!=bound)
             {
             savePerson(pastSelection);
             }
                pastSelection=bound;
             File pRecord=new File("precord");
             try{
             pInfo=new RandomAccessFile(pRecord,"rw");
             pInfo.seek(bound*470);
             for(cout=0;cout<50;cout++)
             {
             records[cout].setName(pInfo.readUTF());
             if(records[cout].getName()!="")
             {
             //nameList.add(records[cout].getName());
             }
             records[cout].setSex(pInfo.readUTF());
             records[cout].setGroup(pInfo.readUTF());
             records[cout].setmNumber(pInfo.readUTF());
             records[cout].setpNumber(pInfo.readUTF());
             records[cout].setAddr(pInfo.readUTF());
             records[cout].setQQ(pInfo.readUTF());
             records[cout].setZip(pInfo.readUTF());
             records[cout].setEmail(pInfo.readUTF());
             records[cout].setTip(pInfo.readUTF());
             } 
             }
             catch(EOFException eof){
            
             }
             catch(IOException IOExcept){
             JOptionPane.showMessageDialog(null,"无法加载组"+sGroup.getActionCommand(),
             "加载失败",JOptionPane.ERROR_MESSAGE);
             }
             finally{
             pInfo.close();
             }
             nameList.setSelectedIndex(0);
             selectedPDisplay();
            }
            
            public void selectedPDisplay()
            {
             int cout;
             cout=nameList.getSelectedIndex();
             if(records[cout].getName()!="")
             {
                nameField.setText(records[cout].getName());
                sexField.setText(records[cout].getSex());
                groupField.setText(records[cout].getGroup());
                mNumberField.setText(records[cout].getmNumber());
                pNumberField.setText(records[cout].getpNumber());
                zipField.setText(records[cout].getZip());
                qqField.setText(records[cout].getQQ());
                emailField.setText(records[cout].getEmail());
                tipArea.setText(records[cout].getTip());
                addrArea.setText(records[cout].getAddr());
             }
            }
            public void addGroup() throws Exception
            {
             String add;
             int bound=sGroup.getMaximumRowCount();
             add=JOptionPane.showInputDialog(null,"请输入组名(不超过6个字)");
             if(add.length()>6 | add=="")
             {
             JOptionPane.showMessageDialog(null,"非法的输入!","错误",
             JOptionPane.ERROR_MESSAGE);
             return;
             }
             File gRecord=new File("grecord");
             File pRecord=new File("precord");
            try{
               gInfo=new RandomAccessFile(gRecord,"rw");
               gInfo.seek(gInfo.length()-1);
               gInfo.writeUTF(add);
               pInfo=new RandomAccessFile(pRecord,"rw");
               pInfo.seek(bound*470);
               for(bound=0;bound<50;bound++)
               {
                 records[bound].setName(" ");
                 records[bound].setSex(" ");
                 records[bound].setGroup(" ");
                 records[bound].setmNumber(" ");
                 records[bound].setpNumber(" ");
                 records[bound].setZip(" ");
                 records[bound].setAddr(" ");
                 records[bound].setQQ(" ");
                 records[bound].setEmail(" ");
                 records[bound].setTip(" ");
               }
               pInfo.close();
            }
            catch(IOException IOExcept){
             JOptionPane.showMessageDialog(null,"写入组失败!","错误",
             JOptionPane.ERROR_MESSAGE);
            }
            finally{
             gInfo.close();
            }
            }
            
            public void addPersonDialog()
            {
             int bound=0;
    //         bound=nameList.getItemCount();
             if(records[bound].getName()!="")
             {
             JOptionPane.showMessageDialog(null,"该组记录已满!","记录已满",
             JOptionPane.WARNING_MESSAGE);
             }
             else{
             JOptionPane.showMessageDialog(null,"请在右边输入新联系人信息。",
             "新建联系人",JOptionPane.INFORMATION_MESSAGE);
             addTG.setEnabled(true);
             }
            
            
            }
    (Pocessor类未完)
      

  3.   

    public static void main(String args[]) throws Exception
        {    
             try{
            Messagelist application=new Messagelist();   
             }catch(Exception e){
                System.out.println("Exception occured in Messagelist constructor:"e.getMessage());
             }
        }
      

  4.   

    CS结构的程序,你如果使用了事件监听机制,你应该使这个类继承java.awt.event下的***Listener方法
      

  5.   

    看得头晕~楼上的接该是实现接口吧,!或者是继承一个Adapter!自己实现某些要用到的方法!
    如果是实现接口的话,要把源接口的所有方法都实现掉!
      

  6.   

    cGroup.addActionListener(
                    new ActionListener() {
                public void actionPerformed(ActionEvent E) {
                    try {
                        pocessor.addGroup();
                    } catch (Exception ex) {
                    }
                }
            }
            );
      

  7.   

    下面是我对异常处理的体会,不一定真确,楼主参考一下!
    异常处理机制可以这样描述:
      1,异常处理是针对方法的。也就是说只有方法才能够抛出异常和需要捕获异常;
      2,对一个方法,如果在这个方法内部有可能发生异常,则这个方法有两种选择:
                    要么,在方法内部用try..catch来捕获异常;
                    要么,直接申明这个方法抛出异常,即在方法后面跟一个throws语句,
                    这个throws语句申明抛出的异常也就是在本方法种有可能发生的异常;
                    throws XXXException语句代表这个方法如果发生了XXXException,本方法
                    不做处理,直接交给本方法的调用者去处理,如果本方法的调用者还不处理,也声 
                    抛出异常,那同理,本方法的调用者的调用者则应该处理这个异常,依次类推,
                    最终的调用者肯定是main()方法,如果你的main()方法也声明为抛出异常,那处理 
                    异常的任务就会交给虚拟机来处理,虚拟机处理就比较霸道了,它才不会象你
                    写的try...catch语句还可以继续执行程序,虚拟机只要接到异常,马上终止程序,
                    所以如果你想要自己的程序发生异常后还可以运行,那就不要总是throws异常,
                    至少不要逐级抛给虚拟机;
      3,2所描述的有一个特例:就是当这个异常是个RuntimeException,即运行时异常的时候,我们既可以不try...catch它,也可以不throws它,因为它是否会发生异常到运行的时候才可以判断出来;
    最常见的就是被0除的异常,就是个运行时异常;RuntimeException的子类都是运行时异常;
      4,如果一个接口的方法后面并没有throws XXXException这样语句,而在你对该接口的实现类的方法后面throws XXXException,那自然会“cannot implemnt *(java.awt.event.*) ”,因为接口中定义的方法和你的实现类中写的方法不是同一个方法呀,这代表你根本就没实现接口中的那个方法,而是写了一个和接口的那个方法名字相同的另有个方法而已;
      

  8.   

    File gRecord = new File("grecord");
    这句什么意思,是不是出错了啊,文件的载入也要扩展名的啊
      

  9.   

    是啊,太多了,看起来要很多时间哦,建议你先写个框架,然后再往里面添东西,添点,调试一下。建立一个.bat文件用来调试就OK了