2016-05-02 7 views
0

アカウントクラスは、句をスローする各メソッドにエラーをチェックし、適切な例外をスローすることです。両方のif文のAccountAppletクラスをコンパイルしようとすると、エラーが発生します。報告されない例外EmptyFieldException;キャッチまたはので、私はエラーが私は私の最初の質問のとおりAccountクラスを完了していないということであると仮定していますスローされるように宣言されなければなりませんエラーと例外のチェック

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 
    } 

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

EmptyFieldException

public class EmptyFieldException extends Exception 

{ 
    EmptyFieldException() 
    { 
    super(); 

    } 

InsufficientFundsException

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

} 

NegativeAmountException

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

[投げてください](https://docs.oracle.com/javase/tutorial/essential/exceptions/throwing.html)。 – Compass

+0

@Compassこれはどのように私は到達不能な文のエラーを取得し続けるだろうか? public void withdraw(double amount)throws NegativeAmountException、 InsufficientFundsException { if(amount <0) { throw new NegativeAmountException(); 新しいInsufficientFundsException()をスローします。 } } –

+0

例外をスローすることは、このメソッドの最後です。これはreturn文のようなもので、return文の後のコードは実行できません。それを回避する唯一の方法はfinallyブロックを使用することです。 – Compass

答えて

0

私は、コードの一部が完全に欠落しているか、されていないと思います。あなたのコードには、EmptyFieldExceptionを投げているところの一つのメソッド( "getAmount(JTextField tf)")があります。したがって、このメソッドを呼び出す場合は、try-catchブロックを囲むか、メソッドレベルで例外をスローする必要があります。私はAccountAppletクラスのいくつかの場所で参照を見つけることができたが、コメントされている。何かがありません:|

+0

私はあなたに十分な評判がないことを知っていますが、これは答えではなく[コメント](http://stackoverflow.com/help/privileges/comment)でなければなりません。 – Mifeet

+0

Mifeetありがとう、残念これは私の最初の投稿であるstackoverflowです。 –

+0

問題はありませんが、あなたが参加しようとしていることは良いことです。 – Mifeet

0

AccountAppletクラスでは、getAmount(wttf)メソッドをコメントアウトしました。コメントを外すとエラーが表示されると思います。

この方法は、いくつかの例外がスローされますので、あなたは(これはイベントであることから、このお勧めしません)、またはそれをキャッチし、エラーを扱うあなたのactionPerformed方法のaswellによってスローされるようにそれらを宣言する必要があり、次のいずれか

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"); 
    } 
} 
+0

どのように私はそれがスローされ、try catchブロックを持っていないと宣言しますか? actionPerformedメソッドでは、選択されたボタンのみをチェックし、エラーに応じてステータスが更新されます。 getAmountメソッドは、JTextFieldの1つから量を読み込み、それを数値に変換します。 getAmountメソッドもNumberFormatExceptionをキャッチし、キャッチブロックはそれを呼び出すメソッドに例外をスローします。 –

関連する問題