学习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();
}
问题:
我的代码在编译的时候总是出现
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();
}
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;
}
}
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类未完)
{
try{
Messagelist application=new Messagelist();
}catch(Exception e){
System.out.println("Exception occured in Messagelist constructor:"e.getMessage());
}
}
如果是实现接口的话,要把源接口的所有方法都实现掉!
new ActionListener() {
public void actionPerformed(ActionEvent E) {
try {
pocessor.addGroup();
} catch (Exception ex) {
}
}
}
);
异常处理机制可以这样描述:
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.*) ”,因为接口中定义的方法和你的实现类中写的方法不是同一个方法呀,这代表你根本就没实现接口中的那个方法,而是写了一个和接口的那个方法名字相同的另有个方法而已;
这句什么意思,是不是出错了啊,文件的载入也要扩展名的啊