2017-01-24 46 views
1

我的代碼執行一些算術操作來將二進制輸入轉換爲十進制輸出。我還創建了一個異常類,它擴展了NumberFormatException,以便在輸入不是1或0時引發錯誤。我想要將異常拋出到JTextField。JTextField中的顯示異常

private void biTodeciActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
String binary; 
binary = binaryStringText.getText(); 
int total = 0; 
for(int i = 0; i < binary.length(); i++) 
{ 
    if (binary.charAt(i) != '0' && binary.charAt(i) != '1') 
    { 
     throw new ParseMethods.BinaryNumberFormatException(binary.charAt(i)+" is not" 
       +" a valid binary input."); 
    } 
    else if(binary.charAt(i) == '1'){ 
     total += Math.pow(2, (binary.length()-1)-i); 
    } 
} 

deciOut.setText(""+total); 
} 
+1

你不能從沒有定義它的方法拋出異常。所以你有點卡住了。在你的情況下,我只是調用文本字段的'setText',傳遞你想要的信息(假設你想在字段中顯示異常),或者更實際一些,使用'JOptionPane'來顯示錯誤信息 – MadProgrammer

回答

2

本質上,你試圖做的事情是行不通的。 BinaryNumberFormatException沒有聲明它會拋出任何異常(並假設您使用的是NetBeans),您將無法(輕易地)修改它。

你可以換你的代碼在此方法中的try-catch塊,但這只是,嗯,那種雜亂(恕我直言)

相反,我可以做什麼,是創建一個類,它不談話,像...

public static class BinaryConverter { 
    public static String toDecimal(String binary) throws BinaryNumberFormatException { 
     //... 
    } 

    // Maybe a toBinary method as well... 
} 

例如。該toDecimal聲明的事實,這將拋出一個BinaryNumberFormatException(雖然我覺得某種分析異常的效果會更好)

然後在動作執行的方法,你可以不喜歡......

private void biTodeciActionPerformed(java.awt.event.ActionEvent evt) { 
    try { 
     deciOut.setText(BinaryConverter.toDecimal(binaryStringText.getText())); 
    } catch (BinaryNumberFormatException exp) { 
     exp.printStackTrace(); 
     deciOut.setText(exp.getMessage()); 
    } 
} 

這將允許以更簡潔的方式處理手術的成功和失敗。

這使代碼更可重用,更容易管理。

作爲一種理念

+0

那麼,我已經有了paseBinary的方法,它接受一個String輸入並返回一個int。但是當我嘗試在biTodeciActionPerformed(java.awt.event.ActionEvent evt)中調用它時,Netbeans告訴我它不知道這個方法。它們都在默認包中。 –

+0

如果沒有[可運行的示例](https://stackoverflow.com/help/mcve)來說明你的問題,那麼就不可能知道代碼有什麼問題。 – MadProgrammer

+0

我得到它的工作。你的回答非常感謝我! –

0

打印異常直接插入文本字段以字符串格式 deciOut.setText( 「」 + EXP);