2012-07-26 227 views
-1

未報告的異常java.lang.exception:必須被捕獲或聲明爲拋出。 爲什麼會出現這個問題?這是否可以幫助解決這個問題?未報告的異常java.lang.exception

我在的Java應用此代碼..

public byte[] encrypt(String message) throws Exception { 
    MessageDigest md = MessageDigest.getInstance("md5"); 
    byte[] digestOfPassword = md.digest("ABCDEABCDE" 
        .getBytes("utf-8")); 
    byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); 
    for (int j = 0, k = 16; j < 8;) { 
      keyBytes[k++] = keyBytes[j++]; 
    } 

    SecretKey key = new SecretKeySpec(keyBytes, "DESede"); 
    IvParameterSpec iv = new IvParameterSpec(new byte[8]); 
    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 
    cipher.init(Cipher.ENCRYPT_MODE, key, iv); 

    byte[] plainTextBytes = message.getBytes("utf-8"); 
    byte[] cipherText = cipher.doFinal(plainTextBytes); 
    // String encodedCipherText = new sun.misc.BASE64Encoder() 
    // .encode(cipherText); 

    return cipherText; 
} 

public String decrypt(byte[] message) throws Exception { 
    MessageDigest md = MessageDigest.getInstance("md5"); 
    byte[] digestOfPassword = md.digest("ABCDEABCDE" 
        .getBytes("utf-8")); 
    byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); 
    for (int j = 0, k = 16; j < 8;) { 
      keyBytes[k++] = keyBytes[j++]; 
    } 

    SecretKey key = new SecretKeySpec(keyBytes, "DESede"); 
    IvParameterSpec iv = new IvParameterSpec(new byte[8]); 
    Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 
    decipher.init(Cipher.DECRYPT_MODE, key, iv); 

    byte[] plainText = decipher.doFinal(message); 

    return new String(plainText, "UTF-8"); 
} 

顯示在此錯誤以下部分

byte[] pass = encrypt(password); 
String pw = new String(pass); 

任何想法? 即時通訊使用Java NetBeans做我的項目..

回答

4

您的encrypt()方法拋出一個Exception。這意味着在你調用這個方法的地方,你應該明確地拋出這個Exception或者使用try-catch塊來處理它。

在你的情況下,這個特殊的代碼:

byte[] pass = encrypt(password); 
String pw = new String(pass); 

您應該括在:

try{ 
byte[] pass = encrypt(password); 
String pw = new String(pass); 
}catch(Exception exe){ 
//Your error handling code 
} 

或聲明,其中該代碼是封閉與throws Exception的方法。

0

另一個有趣的閱讀有2種方式處理異常。

- Either `declare` it 
- or `Handle` it. 

2.encrypt()方法上述拋出異常

因此,要麼聲明它在其中要調用它的方法聲明。

如:

public void MyCallingMethod() throws Exception{ 

    byte[] pass = encrypt(password); 
    String pw = new String(pass); 


} 

或用try/catch塊處理它,finally是可選

try{ 

    byte[] pass = encrypt(password); 
    String pw = new String(pass); 
    }catch(Exception ex){ 


    } 
相關問題