2016-04-26 28 views
-1

Ich bin verwirrt, wie Sie diesen Schritt für meine getAmount Methode sollteMit Ausnahmen und wieder wirft

Diese Methode tun, um die Menge in einen der JTextFields und wandeln den Feldeintrag zu einer Reihe lesen. (Ich glaube, ich diesen Schritt tat richtig)

Obwohl ein Number in diesem Verfahren auftritt, wenn ein nicht-numerischer Feldeintrag zu einem Doppel umgewandelt wird, kann das Verfahren nicht die Ausnahme verarbeiten, da es weiß nicht, welche Transaktion wird verarbeitet. Die Methode muss jedoch die NumberFormatException fangen, damit ein Laufzeitfehler nicht auftritt, mit Fehler Nachrichten, die in dem DOS-Fenster angezeigt werden. Der Catch-Block muss die Ausnahme auslösen, die er fängt. Dies ist ein Beispiel für das erneute Auslösen einer Ausnahme. Die Java-Laufzeitumgebung erzeugt die Ausnahme und löst sie aus, aber die Methode, die sie abfängt, hat nicht genug Informationen, um die Ausnahme zu verarbeiten, so dass sie die Methode aufruft, die sie aufruft.

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

Dieser Code ist alles notwendig, um Ihr Problem zu demonstrieren? Bitte lesen Sie und stellen Sie [MCVE] bereit. – Savior

+1

Was ist deine Frage? Ich sehe nirgendwo in diesem Code einen "Fang" -Block. Und wenn die fragliche Methode die Ausnahme nicht sinnvoll handhaben kann, hat sie keine Probleme, die Ausnahme zu fangen. – David

+0

Ich bin brandneu zu Ausnahmen/versuchen/fangen etc – HoodCoolege

Antwort

0

Ist das, was Sie suchen:

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