Pourquoi Java exige-t-il que les exceptions soient interceptées ou déclarées pour être levées ?
En Java, une méthode peut lever une exception si une erreur se produit lors de son exécution. Si la méthode ne gère pas explicitement l’exception, elle doit déclarer l’exception dans sa signature de méthode. Cela oblige l'appelant de la méthode à gérer l'exception ou à déclarer l'exception dans sa propre signature de méthode.
Pourquoi obtenez-vous l'exception "java.lang.Exception; doit être interceptée ou déclarée à être lancé" ?
Cette exception se produit lorsqu'une méthode appelle une autre méthode qui lève une exception vérifiée, mais que la méthode appelante ne gère pas l'exception ou ne la déclare pas dans sa méthode signature.
Dans votre code, la méthode encrypt lève une exception vérifiée javax.crypto.IllegalBlockSizeException, mais la méthode actionPerformed ne gère ni ne déclare cette exception.
Comment résoudre le problème problème
Pour résoudre ce problème, vous pouvez soit gérer l'exception dans la méthode actionPerformed, soit déclarer l'exception dans la méthode signature.
Gestion de l'exception:
public void actionPerformed(ActionEvent e) { try { byte[] encrypted = encrypt(concatURL); String encryptedString = bytesToHex(encrypted); content.removeAll(); content.add(new JLabel("Concatenated User Input -->" + concatURL)); content.add(encryptedTextField); setContentPane(content); } catch (Exception exc) { // TODO: handle the exception } }
Déclaration de l'exception:
public void actionPerformed(ActionEvent e) throws Exception { byte[] encrypted = encrypt(concatURL); String encryptedString = bytesToHex(encrypted); content.removeAll(); content.add(new JLabel("Concatenated User Input -->" + concatURL)); content.add(encryptedTextField); setContentPane(content); }
Manquant erreur d'instruction return :
Cette erreur se produit car la méthode de cryptage ne avoir une instruction return dans le bloc catch. Cela signifie que la méthode ne renvoie rien en cas d'exception, ce qui n'est pas autorisé.
Pour résoudre ce problème, vous pouvez ajouter une instruction return au bloc catch, comme indiqué ci-dessous :
public static byte[] encrypt(String toEncrypt) throws Exception{ try{ String plaintext = toEncrypt; String key = "01234567890abcde"; String iv = "fedcba9876543210"; SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE,keyspec,ivspec); byte[] encrypted = cipher.doFinal(toEncrypt.getBytes()); return encrypted; } catch(Exception e){ return null; // Always must return something } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!