purtroppo ho dovuto adottare per forza questa soluzione.
JCalendar l'ho usato e avrei preferito usarlo anche io...ma non comando io

per i vari controlli, li ho già fatti tutti, e per quanto pesante e macchinosa sia la cosa....li ricopio qui in caso di utilità:

comparazione tra due date
codice:
    private boolean compare2Dates(String giorno1, String mese1, String anno1, String giorno2, String mese2, String anno2) {
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.set(Integer.parseInt(anno1), Integer.parseInt(mese1), Integer.parseInt(giorno1));
        c2.set(Integer.parseInt(anno2), Integer.parseInt(mese2), Integer.parseInt(giorno2));
        if (c1.before(c2)) {
            return true;//prima data minore della seconda
        } else {
            return false;//seconda data maggiore o uguale della prima
        }
    }
verifica delle mensilità (aprile 30 giorni...)
codice:
    private void verificaMensilita() {
        String mese1 = (String) this.meseInizio.getSelectedItem();
        String mese2 = (String) this.mesiScadenza.getSelectedItem();
        
        String giorno1 = (String) this.giorniInizio.getSelectedItem();
        String giorno2 = (String) this.giorniScadenza.getSelectedItem();
        
        if (mese1.equalsIgnoreCase("Aprile")
                || mese1.equalsIgnoreCase("giugno")
                || mese1.equalsIgnoreCase("settembre")
                || mese1.equalsIgnoreCase("novembre")
                || mese2.equalsIgnoreCase("Aprile")
                || mese2.equalsIgnoreCase("giugno")
                || mese2.equalsIgnoreCase("settembre")
                || mese2.equalsIgnoreCase("novembre")) {
            if (giorno1.equalsIgnoreCase("31")) {
                this.giorniInizio.setSelectedItem("30");
            }
            if (giorno2.equalsIgnoreCase("31")) {
                this.giorniScadenza.setSelectedItem("30");
            }
        }
    }
verifica per il mese di febbraio della sua bisestilità
codice:
    private void verificaBisestilita() {
        
        String mese1 = (String) this.meseInizio.getSelectedItem();
        String mese2 = (String) this.mesiScadenza.getSelectedItem();
        
        String giorno1 = (String) this.giorniInizio.getSelectedItem();
        String giorno2 = (String) this.giorniScadenza.getSelectedItem();
        
        
        String anno2 = (String) this.annoScadenza.getSelectedItem();
        String anno1 = (String) this.annoInizio.getSelectedItem();
        
        GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
        if (mese1.equalsIgnoreCase("febbraio")) {
            if (gc.isLeapYear(Integer.parseInt(anno1))) {
                if (giorno1.equalsIgnoreCase("31") || giorno1.equalsIgnoreCase("30")) {
                    this.giorniInizio.setSelectedItem("29");
                }
            } else {
                if (giorno1.equalsIgnoreCase("31") || giorno1.equalsIgnoreCase("30") || giorno1.equalsIgnoreCase("29")) {
                    this.giorniInizio.setSelectedItem("28");
                }
            }
        }
        if (mese2.equalsIgnoreCase("febbraio")) {
            if (gc.isLeapYear(Integer.parseInt(anno2))) {
                if (giorno2.equalsIgnoreCase("31") || giorno2.equalsIgnoreCase("30")) {
                    this.giorniScadenza.setSelectedItem("29");
                }
            } else {
                if (giorno2.equalsIgnoreCase("31") || giorno2.equalsIgnoreCase("30") || giorno2.equalsIgnoreCase("29")) {
                    this.giorniScadenza.setSelectedItem("28");
                }
            }
            
        }
        
    }
questo è il metodo che richiama tutto (il converti è rimasto invariato)
codice:
  private void verificaData() {
        verificaMensilita();
        verificaBisestilita();
        String giorno1 = (String) this.giorniInizio.getSelectedItem();
        String mese1 = (String) this.meseInizio.getSelectedItem();
        String anno1 = (String) this.annoInizio.getSelectedItem();
        String giorno2 = (String) this.giorniScadenza.getSelectedItem();
        String mese2 = (String) this.mesiScadenza.getSelectedItem();
        String anno2 = (String) this.annoScadenza.getSelectedItem();
        if (!(compare2Dates(giorno1, convertiMese(mese1), anno1, giorno2, convertiMese(mese2), anno2))) {
            this.giorniScadenza.setSelectedItem(this.giorniInizio.getSelectedItem());
            this.mesiScadenza.setSelectedItem(this.meseInizio.getSelectedItem());
            this.annoScadenza.setSelectedItem(this.annoInizio.getSelectedItem());
        }
    }
sò che è una soluzione scomoda e poco rapida, ma tra esigenze di tempo e richieste "dall'alto" ho dovuto utilizzare questa soluzione.

per il problema originale, credo che fosse la macchina sulla quale operavo che dava problemi...ho cambiato pc e funziona tutto (quell'altro è morto miracolosamente)