2016-05-03 97 views
-2

在AccountApplet我想diplay,这部分是由getMessage方法做错误消息“不允许存款空场”,另一半则是不允许的存款,生产异常错误消息

然而,在我的程序中,getMessage方法产生“空字符串”,而不是“空字段”,我将如何进行更改?

的的getMessage方面在actionPerformed方法

这里做是AccountApplet类

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

    Account account = new Account(1234,1000); // ******** here ******* 

    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 
    { 
     try 
     { 
     getAmount(dptf); 
     account.deposit(Double.parseDouble(dptf.getText())); 
     account.setBalance(account.balance); 
     status.setText("Deposit processed"); 

     refreshFields(); 
     } 


     catch (NegativeAmountException nae) 
     { 
     status.setText(nae.getMessage() + " not allowed for deposit"); 
     } 
     catch (EmptyFieldException efe) 
     { 
     status.setText(efe.getMessage() + " not allowed for deposit"); 
     } 
     catch (Exception ex) 
     { 
     status.setText(ex.getMessage() + " not allowed for deposit"); 
     } 
    } 

    if (e.getSource() == wt) // Executes if withdraw was clicked 
    { 
     try 
     { 
     getAmount(wttf); 
     account.withdraw(Double.parseDouble(wttf.getText())); 
     account.setBalance(account.balance); 
     status.setText("Withdraw processed"); 

     refreshFields(); 
     } 

     catch (InsufficientFundsException ife) 
     { 
     status.setText(ife.getMessage() + " Insufficient funds"); 
     } 
     catch (NegativeAmountException nae) 
     { 
     status.setText(nae.getMessage() + " not allowed for withdraw"); 
     } 
     catch (EmptyFieldException efe) 
     { 
     status.setText(efe.getMessage() + " not allowed for withdraw"); 
     } 
     catch (Exception ex) 
     { 
     status.setText(ex.getMessage() + " not allowed for withdraw"); 
     }  


    }  


    } // end ActionPerformed 


    public void refreshFields() 
    { 
    NumberFormat fmt = NumberFormat.getCurrencyInstance(); 
    aitf.setText("" + account.getId()); 
    abtf.setText("" + fmt.format(account.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 depo; 

    try 
    { 
    depo = Double.parseDouble(dptf.getText()); // read in one textfield and convert to a number 
    } 
    catch (NumberFormatException nfe) // catch NumberFormatException 
    { 
    throw nfe; // catch throws NumberFormatException 
    } 



    return depo; 
    } // End  



} // End Class 

帐户类

import java.awt.*; 
import java.awt.event.*; 



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

    Account (int id, double balance) 
    { 
    this.id = id; 
    this.balance = balance; 
    }  

    public int getId() 
    { 

    return id; 
    } 

    public double getBalance() 
    { 
    return balance; 
    } 

    public void setBalance(double balance) throws NegativeAmountException 
    { 
    if (balance < 0) 
     throw new NegativeAmountException(); 
    this.balance = balance; 
    } 

    public void deposit(double amount) throws NegativeAmountException 
    { 
    if (amount < 0) 
    throw new NegativeAmountException(); 
    balance += amount; 
    } 

    public void withdraw(double amount) throws NegativeAmountException, 
              InsufficientFundsException 
    { 

    if (amount > balance) 
    { 
     throw new NegativeAmountException(); 
    } 

    if (amount > balance) 
    { 
     throw new InsufficientFundsException(); 
    } 

    balance -= amount; 


    } 




} 

EmptyFieldException

public class EmptyFieldException extends Exception 

{ 
    EmptyFieldException() 
    { 
    super(); 
    } 

} 

InsufficientFundsException

public class InsufficientFundsException extends Exception 
{ 
    InsufficientFundsException() 
    { 
    super(); 
    } 
} 

NegativeAmountException

public class NegativeAmountException extends Exception 
{ 
    NegativeAmountException() 
    { 
    super(); 
    } 
} 

回答

0

也许我不明白你的问题,但为什么不能简单地设定所需的输出的文本?即,改变这种:

catch (EmptyFieldException efe) 
{ 
    status.setText(efe.getMessage() + " not allowed for deposit"); 
} 

这样:

catch (EmptyFieldException efe) 
{ 
    status.setText("An empty field is not allowed for deposit"); 
} 
在其他catch块

和类似。


你问意见,为什么InsufficientFundsException永远不会抛出,即使抛出它的条件,if (amount > balance)是真实的。

要学会解决这个问题,而且更重要的一个伟大调试技术,将帮助你学习如何解决未来的错误,你需要了解你的代码走精神上来在你的心中的眼睛看到它在做什么,因为它运行。请仔细看看退出方法。使用大于余额的取款金额参数调用它,会发生什么情况?按什么顺序?

public void withdraw(double amount) throws NegativeAmountException, 
              InsufficientFundsException { 
    if (amount > balance) { 
     throw new NegativeAmountException(); 
    } 
    if (amount > balance) { 
     throw new InsufficientFundsException(); 
    } 
    balance -= amount; 
} 

请注意,一旦引发任何异常,方法结束。那么当金额大于余额时会发生什么?什么异常只会被抛出,为什么?如果你照我的建议去做,答案就会变得很明显。

+0

只是一个程序要求,原因不明。但是,您是否知道为什么我输入的余额不足时,我的资金不足没有被捕获?如果我在帐户撤销方法中颠倒if语句的顺序,它会被捕获,但是负数例外不会。所以问题必须在 –

+0

@ slow.learner:你需要学会在脑海中通过你的代码,以便在你的脑海中看到它在运行时的功能。请仔细看看退出方法。使用大于余额的取款金额参数调用它,会发生什么情况?按什么顺序?请做到这一点,你应该看到为什么一个例外被抛出,另一个不是。请注意,一旦抛出异常,该方法结束。然后,您需要重新阅读您的要求,并根据要求找出正确的方法。 –

+0

@ slow.learner:请看编辑回答,请让我知道,如果它对你有意义。 –