试图在ActionListener中调用的方法中抛出异常

时间:2016-06-01 05:36:35

标签: java bluej

所以我不确定为什么在尝试使用按钮的动作侦听器调用方法时出现错误。我创建了面板并将布局设置为流布局,然后将其添加到内容窗格,然后在此处创建了按钮...

JButton buyButton = new JButton("Buy");
    panel.add(buyButton);
    buyButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {buy();}});

然后我在buy方法中创建了一个try catch块...

public void buy throws OverException
{
    try{
       //tries the code
    }
    catch(OverException e){
      //does stuff...
    }
}

但它一直说在创建按钮时必须捕获或声明在调用buy()的方法中抛出它。

2 个答案:

答案 0 :(得分:1)

编译器清楚地告诉你这样做:... must be caught or declared to be thrown in the method calling of buy()

OverException必须被actionPerformed捕获,或者actionPerformed必须被声明为OverException

您无法更改actionPerformed的声明,因此请抓住异常:

buyButton.addActionListener(
    new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                try {
                    buy();
                }
                catch(OverException ex)
                {
                     // TODO error handling
                }
            }
        });

答案 1 :(得分:1)

您已添加新的ActionListener()作为内部类,实现方法是actionPerformed()。你在actionPerformed()中调用了buy()。除了你的代码,你可以吐出“OVerException”。因此,您可以通过两种方式处理此异常:

  • 在代码本身内捕获异常。你做到了。
  • 将异常抛给调用方法,以便在其他地方处理它。你用这个来做。public void buy throws OverException。但是调用方法(actionPerformed())没有处理它。所以你得到了编译错误

方式1:

buyButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {buy();}});

public void buy() 
{
try{
   //tries the code
}
catch(OverException e){
  //does stuff...
}
}
方式2由@ john3136

提出