2012-07-26 264 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){ 


    } 
相关问题