2017-09-18 9 views
0

私のパース・ダブルは、その情報が次のようになっているので、例外が発生しているようです:スレッド「AWT-EventQueue-0」の例外java.lang.NumberFormatException:空文字列 another likely混乱している数値書式の例外

public double withdrawl(double currentBal, double withdrawlAmount) throws InsufficientFunds{ 
    int i =0 ; 
    double overDraw = 0 ; 
    try{ 
    //verifies that input was numeric and evenly divisible by 20 
    if(withdrawlAmount % 20 == 0){ 
    if(i>4){ 
     if(currentBal>1.5){ 
     currentBal = currentBal-1.5 ; 
     }else{ 
     JOptionPane.showMessageDialog(null, "Insufficient funds"); 
     overDraw = currentBal-1.5 ; 
     throw new InsufficientFunds(overDraw); 
     } 
    } 
    //stops withdrawl for insufficient funds 
    if(currentBal<withdrawlAmount) { 
     JOptionPane.showMessageDialog(null, "Insufficient funds"); 
     overDraw = currentBal-withdrawlAmount ; 
     throw new InsufficientFunds(overDraw); 
    }else { 
     currentBal=currentBal-withdrawlAmount ; 
    } 
    i++ ; 
    }else { 
    JOptionPane.showMessageDialog(null, "Please enter a withdarl amount that is divisible by 20"); 
    } 
    }catch (InsufficientFunds ex){ 
     ex.getAmount(); 
    } 
    return currentBal ; 
} 




public class ATM extends JFrame implements ActionListener { 
JButton withdraw, deposit, transfer, balance ; 
JTextField input ; 
boolean checkingActive = true ; 
public double checkingBal = 0 ; 
public double savingsBal = 0 ; 

メインクラス:

容疑者は方法の私のtry catchブロックにもかかわらず、それが報告されていない例外です確信している

account1.withdrawl(checkingBal, changeValue) ; 

が呼び出されています

ATM(){ 
withdraw = new JButton ("Withdraw") ; 
deposit = new JButton ("Deposit") ; 
transfer = new JButton ("Transfer") ; 
balance = new JButton ("Balance") ; 
input = new JTextField (12) ; 
input.setText("0") ; 
input.setEditable(true) ; 

JRadioButton checking = new JRadioButton("Checking", true) ;; 
JRadioButton savings = new JRadioButton("Savings") ; 
this.add(checking); 
this.add(savings); 
ButtonGroup acctSelector = new ButtonGroup(); 
acctSelector.add(checking); 
acctSelector.add(savings); 


add(withdraw); 
add(deposit); 
add(transfer); 
add(balance); 
add(input); 

//assigns buttons to logic gorup 
ButtonGroup accountChoice = new ButtonGroup(); 
accountChoice.add(checking) ; 
accountChoice.add(savings) ; 

input = new JTextField(6) ; 

//assigns listeners to buttons 
withdraw.addActionListener(this) ; 
deposit.addActionListener(this) ; 
transfer.addActionListener(this) ; 
balance.addActionListener(this) ; 

setSize(500,400) ; 
setLayout(new FlowLayout()) ; 
setTitle("MoneyBank ATM") ; 
} 

//acceses account changes 
public void actionPerformed(ActionEvent e){ 
double changeValue = Double.parseDouble(input.getText().trim()); 
Account account1 = new Account() ; 
if(checkingActive==true){ 
    if(e.getSource()== withdraw){ 
     account1.withdrawl(checkingBal, changeValue) ; 
    } else if(e.getSource()== deposit) { 
     account1.deposit(checkingBal, changeValue) ; 
    } else if(e.getSource()== transfer){ 
     account1.transfer(checkingBal, changeValue) ; 
    } else { 
     account1.balance(checkingBal) ; 
    } 
} else { 
    if(e.getSource()== withdraw){ 
     account1.withdrawl(savingsBal, changeValue) ; 
    } else if(e.getSource()== deposit) { 
     account1.deposit(savingsBal, changeValue) ; 
    } else if(e.getSource()== transfer){ 
     account1.transfer(savingsBal, changeValue) ; 
    } else { 
     account1.balance(savingsBal) ; 
    } 
} 
JOptionPane.showMessageDialog(null, "Current balances are: \n Savings: " + savingsBal + "\n Checking: "+ checkingBal); 
} 

//constructs atm object/GUI 
public static void main(String[] args){ 
ATM account=new ATM(); 
account.setVisible(true); 
account.setLocation(200,200); 
account.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public boolean pickAccount(boolean k) { 
    checkingActive = k ; 
    return checkingActive ; 
} 

} 
+0

私がtry-catchをwithdrawlコードの周りに置くと、何も変わっていないので、私の最高の推測はまだパーズです。しかし、私はデフォルト値を持っているので、なぜそれが問題を抱えているのか分かりません。 –

+0

私はラジオボタンのための適切なアクションコマンドを決して設定していないので、何かを修正すればわかります。編集:少なくともそれは私の問題の部分を修正しました –

+0

あなたはこのDouble.parseDouble(input.getText()。trim())を行う前にデータのバリデーションを持つ方が良い – spiritwalker

答えて

0

変数入力用に2つの異なるJTextFieldインスタンスを作成しています。

最初:

input = new JTextField(12); 
input.setText("0"); 
input.setEditable(true); 

秒:

input = new JTextField(6); 

ですから、フィールドに番号を記入し、プロセスに値を送信するとき、何を受けていることは、「空の値であります"そして、あなたのアプリケーションがその空からダブルを生成しようと最後の原因:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String 

をあなたはコメントまたは削除2番目のインスタンスを、アプリケーションが動作することができます。

関連する問題