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();
}
答案 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");
}
}