Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: unreported exception

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369

    unreported exception

    salve a tutti, quando compilo mi esce questo tipo di errore :

    unreported exception java.security.InvalidAlgorithmParameterException; must be caught or declared to be thrown.

    Ma in realtà nel costruttore sul quale mi viene sollevato questo errore InvalidAlgorithmParameterException è stato dichiarato come throws, quindi come mai si solleva ancora l'eccezione? devo anche catturarlo per forza all'interno del costruttore stesso?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: unreported exception

    Originariamente inviato da alfa_19
    unreported exception java.security.InvalidAlgorithmParameterException; must be caught or declared to be thrown.

    Ma in realtà nel costruttore sul quale mi viene sollevato questo errore InvalidAlgorithmParameterException è stato dichiarato come throws, quindi come mai si solleva ancora l'eccezione? devo anche catturarlo per forza all'interno del costruttore stesso?
    InvalidAlgorithmParameterException è una eccezione "checked" (dal javadoc risulta che deriva da java.lang.Exception e non è nel sottoramo RuntimeException).

    Pertanto vale la regola che si dice "handle or declare". Una eccezione checked deve essere presa in considerazione.
    Se un costruttore/metodo dichiara di lanciare questa eccezione checked allora tu che invochi questo costruttore/metodo la devi tenere in considerazione. Puoi catturarla (e gestirla in qualche modo, log o altro) oppure dichiarare a tua volta il metodo in cui sei che può lanciare questa eccezione, "spostando" quindi semplicemente la questione più "in alto". Chi invocherà il tuo metodo dovrà porsi la stessa questione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    il problema è che ora ho deciso di gestirla nel costruttore in questo modo :

    ho creato un if che fa un controllo sul nome dell'algoritmo; se questo è quello che mi aspetto proseguo con il codice altrimenti sollevo un'eccezione in questo modo:

    throw new InvalidAlgorithmParameterException();

    peccato che non è cambiato nulla

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da alfa_19
    peccato che non è cambiato nulla
    Scusa ma forse non hai ancora ben chiara la questione delle eccezioni "checked" e della regola handle or declare.

    Scenario: m1() invoca m2() che invoca m3().

    Se è dichiarato m3() throws InvalidAlgorithmParameterException allora m2() ha 2 opzioni: catturare la eccezione e gestirla oppure dichiararla a sua volta.

    Se m2() la cattura e "se la mangia", finisce tutto qui. Se si dichiara m2() throws InvalidAlgorithmParameterException allora la eccezione può uscire da m3() e può uscire anche da m2() (se appunto non catturata).
    Ma dal momento che è dichiarata da m2() con il throws, m1() a sua volta deve porsi la stessa questione: la catturo o la dichiaro a mia volta?

    Questo è il succo: una eccezione checked va trattata e presa in considerazione in qualche modo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    mmm...ma nel mio caso l'eccezione è dichiarata in tutti i metodi che vengono chiamati...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da alfa_19
    mmm...ma nel mio caso l'eccezione è dichiarata in tutti i metodi che vengono chiamati...
    Hai detto bene: che vengono chiamati... da qualcuno... e questo qualcuno come tratta l'eccezione?

    Ovvero: dove viene catturata? E' questo il punto: da qualche parte la devi catturare.

    Un'applicazione comincia sempre con il metodo main()... il tuo main che fa? Ha due possibilità:

    1) Cattura l'eccezione
    2) La dichiara in modo che se ne occupi la JVM (pessima scelta!)

    Posta il codice con tutte le chiamate: da qualche parte (non necessariamente nel main, che era solo per farti capire) stai invocando un metodo (o un costruttore) che dichiara l'eccezione, senza catturarla.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    allora in pratica il mio main chiama il costruttore di questo oggetto e successivamente ne chiama un altro metodo.

    sia il costruttore che l'altro metodo dichiarano l'eccezione (throws) e entrambi la gestiscono in questo modo

    Codice PHP:
    if(algorithm!="AES"){

         throw new 
    InvalidAlgorithmParameterException();

    }
    else {

        ...
    codice...


    dov'è l'errore?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da alfa_19
    sia il costruttore che l'altro metodo dichiarano l'eccezione (throws) e entrambi la gestiscono in questo modo

    Codice PHP:
    if(algorithm!="AES"){

         throw new 
    InvalidAlgorithmParameterException();

    }
    else {

        ...
    codice...


    Questa non è una "gestione" (nel senso di cattura-e-fai-qualcosa). Questo è il lancio di una eccezione.

    Come hai detto sopra, hai un costruttore e un metodo che dichiarano questa eccezione. E allora vuol dire che dove tu invochi questo costruttore o metodo dovrai prendere in considerazione tale eccezione. Quindi o la catturi (try/catch) o la dichiari a sua volta.
    Se dove invochi queste due cose è il main(), allora generalmente non è una buona cosa lanciare questa eccezione fuori dal main. Quindi non ti rimane che mettere un try/catch.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    ok scusate l'ignoranza

    ora provo, dovessi avere ancora problemi vi faccio sapere e grazie mille a tutti e due per i consigli

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Tra l'altro if(algorithm!="AES") non è appropriato. Si dovrebbe usare equals().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.