2016-06-01 64 views
0

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

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

然后我在买入方法创建一个try catch块..

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

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

回答

1

所以做编译器明确告诉你要做的事:... must be caught or declared to be thrown in the method calling of buy()

OverException必须被捕入actionPerformedactionPerformed必须被宣告抛出OverException

你不能改变的actionPerformed声明,所以使其捕获的异常:

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

谢谢:)我还在慢慢学习... – LynnLove

1

您已经添加了新的ActionListener()作为一个内部类和执行方法的actionPerformed()。你在actionPerformed()中调用buy(),除了你的代码可以吐出“OVerException”。所以你可以用2种方式处理这个异常:

  • 在代码本身内部捕获异常。你做到了。
  • 向调用方法抛出异常,以便在其他地方处理。您是这样做的。 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

相关问题