2016-04-26 69 views
-1

我是如何为我的getAmount方法使用异常,并重新抛出

这种方法应该阅读JTextField中的一个量和转换领域进入到了许多做到这一步困惑。 (我觉得我做这个步骤正确地)

虽然NumberFormatException异常将在此方法中,当非数字 场条目都被转换为double发生,该方法不能处理的例外,因为它 不知道哪个交易正在处理中。但是,该方法必须捕获 NumberFormatException,以便在DOS窗口中显示错误 消息时不会发生运行时错误。 catch块必须抛出它所捕获的 异常。这是重新抛出异常的例子。 Java 运行时会创建异常并引发异常,但捕获异常的方法不具有足够的信息来处理异常,因此它会将其引发到 称之为的方法。

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"); 

    }  

    if (e.getSource() == wt) // Executes if withdraw was clicked 
    { 
     //getAmount(wttf); 
     status.setText("Withdraw processed"); 
    } 
    } // 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 = Double.parseDouble(dptf.getText()); 



    // Next step 


    return withdraw; 
    } // End getAmount 


} // End Class 
+1

是所有必要的代码,以证明您的问题?请阅读并提供[MCVE]。 – Savior

+1

你的问题是什么?这段代码中的任何地方都没有看到“catch”块。如果所讨论的方法实际上不能以任何有意义的方式处理异常,它就没有业务捕捉异常。 – David

+0

我是异常/ try/catch等新品牌 – HoodCoolege

回答

0

是你找什么:

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