Quote Originariamente inviata da linux_r Visualizza il messaggio
Mi dispiace ti sbagli se vedi bene il codice sollevo un eccezione ArrayIndexOutOfBoundsException !!
E' vero, non avevo visto il try / catch... del resto, non sono abituato a far sollevare eccezioni quando non necessario: sono abituato a "prevenirle" ed evitarle, almeno quelle banali come la ArrayIndexOutOfBoundsException.


Quote Originariamente inviata da linux_r Visualizza il messaggio
Allora il problema è :
codice:
 public boolean verify(JComponent input) {
        boolean a;
        Pattern p=Pattern.compile(regex);
        JFormattedTextField jft=(JFormattedTextField)input;
        a=(Pattern.matches(p.toString(),jft.getText()) && jft.getText().length()<=maxLength &&  jft.getText().length()>=minLength);
        FieldInputVerifier.valid=a;
        if(!a)
        {
         //  JOptionPane.showMessageDialog(null,msg );
        }
        return a;
    }
quella joptionpane che adesso ho commentato, ho aggiunto la variabile booleana di tipo statico che viene settata al valore che verrà poi restitituito al metodo verify. Tale valore lo vado poi a verificare quando premo il bottone . Se vero allora avvio la ricerca perchè significa che nella jformat è stato inserito un valore valido altrimenti stampo un messaggio.
Quello che adesso vorrei chiedere è perchè quella JoptionPane nel verifier mi crea questo problema? penso sia qualcosa legato all evt thread ma non riesco a capire !!

Sì: L'InputVerifier non dovrebbe occuparsi di notificare nulla all'utente. E' un verificatore: dovrebbe limitarsi a porre un veto (dire "Sì", oppure "No") rispetto a quanto digitato dall'utente. E lo fa attraverso il valore booleano di ritorno. Se l'input fornito soddisfa il controllo, si passa oltre, altrimenti semplicemente non si accetta l'input (e, se guardi bene, c'è un metodo chiamato "shouldYeldFocus()" che dice al sistema se la TextField deve mantenere il focus oppure no, proprio in base al valore di ritorno di verify() ).

Se guardi la documentazione del metodo verify(), ci trovi scritto:

Checks whether the JComponent's input is valid. This method should have no side effects.
La parte che ho messo in grassetto è la chiave: questo metodo NON dovrebbe avere effetti "visivi" per l'utente... ed è abbastanza facile capire perchè, se si sa cosa fa un InputVerifier: deve solo verificare se l'input è corretto o meno, influenzando il focus del componente. Se l'input è corretto, il componente può perdere il focus (quindi, l'utente può "uscire dal campo"), altrimenti deve detenere il focus finchè l'input non sarà corretto. Questo ha particolari influenze proprio sul EDT.


Ciao.