检查错误和异常

时间:2016-05-02 18:53:51

标签: java exception try-catch

Account类是让每个抛出子句的方法检查错误并抛出相应的异常,我该怎么做?当尝试为两个if语句编译AccountApplet类时,我得到错误:未报告的异常EmptyFieldException;必须被捕获或声明被抛出所以我假设错误是我没有按照我的第一个问题完成帐户类

#mainmenu li li a

AccountApplet类

width:auto

EmptyFieldException

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;  

public class Account
{
  int id         = 1234;
  double balance = 1000.00;

  Account (int id, double balance)
  {
    id      = 1234;
    balance = 1000.00;
  }

  public int getId()
  {

    return id; 
  }

  public double getBalance()
  {
    return balance;   
  }

  public void setBalance(double balance) throws NegativeAmountException
  {

    // check for error and throw exception

  }

  public void deposit(double amount) throws NegativeAmountException
  {
    // check for error and throw exception
  }

  public void withdraw(double amount) throws NegativeAmountException,
                                             InsufficientFundsException
  {
    // check for error and throw exception
  }

InsufficientFundsException

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.text.NumberFormat;


public class AccountApplet extends JApplet implements ActionListener
{    
  //  For West
  public JLabel  ai       = new JLabel("Account ID ");
  public JTextField  aitf = new JTextField();
  public JLabel  ab       = new JLabel("Account Balance ");
  public JTextField  abtf = new JTextField();

  //  For East
  public JButton     dp   = new JButton ("Deposit");
  public JTextField  dptf = new JTextField();
  public JButton       wt = new JButton ("Withdraw");
  public JTextField  wttf = new JTextField();

  // For South
  public JLabel  status   = new JLabel("placeholder");  


  public void init()
  {
    this.setSize(400, 90);

    //----------------------
    //  Set up the Structure
    //----------------------

    Container      c = getContentPane();
    JPanel         b = new JPanel(new BorderLayout());
    JPanel      west = new JPanel(new GridLayout(2,2));
    JPanel      east = new JPanel(new BorderLayout());
    JPanel depo_with = new JPanel(new GridLayout(2,2));



    // Add BorderLayout to the container
    c.add(b);

    // Add everything to West
    b.add(west, BorderLayout.WEST);


    west.setBorder(new TitledBorder("Display Account Information"));
    west.add(ai);
    west.add(aitf);
    aitf.setEditable(false);
    west.add(ab);
    west.add(abtf);
    abtf.setEditable(false);

    // Add everything to EAST
    b.add(east, BorderLayout.EAST);

    east.setBorder(new TitledBorder("Deposit or Withdrawl Funds"));

    east.add(depo_with, BorderLayout.EAST);

    depo_with.add(dptf);
    depo_with.add(dp);
    depo_with.add(wttf);
    depo_with.add(wt);

    dp.addActionListener(this);
    wt.addActionListener(this);

    // Add everything to SOUTH
    b.add(status, BorderLayout.SOUTH);

    refreshFields();






  }  // End intit

  public void actionPerformed(ActionEvent e)
  {

    if (e.getSource() == dp)  //  Executes if deposit was clicked
    {
      //getAmount(dptf);
      status.setText("Deposit processed");

      refreshFields();

    }    

    if (e.getSource() == wt)  //  Executes if withdraw was clicked
    {
      //getAmount(wttf);
      status.setText("Withdraw processed");

      refreshFields();
    }
  }  // End actionPerformed

  public void refreshFields()
  {
    NumberFormat fmt = NumberFormat.getCurrencyInstance();
    Account Account1 = new Account(1234, 1000.00);
    aitf.setText("" + Account1.getId());
    abtf.setText("" + fmt.format(Account1.getBalance()));
    // diplays accound id and balance in left text fields
    //should be called when the applet is first displayed and after each valid transaction
  }

 public double getAmount(JTextField tf) throws EmptyFieldException,
                                             NumberFormatException,
                                             NegativeAmountException
{
    double withdraw;
    // try to parse 
    try 
    {
        withdraw = Double.parseDouble(dptf.getText());
    } 
    catch (Exception e) 
    {
        // catch exception and do something about it  
        throw e;
    }
    // Next step

    return withdraw;
}  //  End    
} // End Class

NegativeAmountException

public class EmptyFieldException extends Exception

{
  EmptyFieldException() 
  {
    super();

  }

2 个答案:

答案 0 :(得分:0)

我猜部分代码缺失或不完整。在你的代码中只有一个方法(" getAmount(JTextField tf)")你抛出EmptyFieldException。因此,无论您在何处调用此方法,都需要在其周围设置try-catch块,或者需要在方法级别抛出异常。我可以在AccountApplet类的几个地方找到引用,但是它们被注释了。缺少一些东西:|

答案 1 :(得分:0)

在您的AccountApplet课程中,您注释掉了getAmount(wttf)方法 - 我想当您取消注释时会弹出错误。

由于此方法会抛出多个异常,因此您必须声明它们是由actionPerformed方法抛出的(不建议这样做,因为这是一个事件)或捕获它并处理错误:

if (e.getSource() == dp)  //  Executes if deposit was clicked
{
  try {
     getAmount(wttf);
     status.setText("Deposit processed");

     refreshFields();
  } catch (Exception ex) {
     // Something went wrong - handle your error here
     status.setText("Error occured");
  }

}    

if (e.getSource() == wt)  //  Executes if withdraw was clicked
{
  try {
     getAmount(wttf);
     status.setText("Withdraw processed");

     refreshFields();
  } catch (Exception ex) {
     // Something went wrong - handle your error here
     status.setText("Error occured");
  }
}