[Java] Problemi con GregorianCalendar e IllegalArgumentException

fpertegato

Nuovo Utente
26 Lug 2010
16
12
0
Vicenza
Ciao a tutti! :)
Sto provando a scrivere il codice per un'applicazione che "maneggi" le date, quindi sto impostando un JButton che, attraverso la pressione su di esso, controlli la veridicità di una data.
Posto solo il codice relativo a questo JButton per brevità:
Codice:
    class Receiver3 implements ActionListener {
	public void actionPerformed(ActionEvent e) {

//	Inizializzazione interi
	int giorno = 0;
	int mese = 0;
	int anno = 0;

        GregorianCalendar cal = new GregorianCalendar (anno, mese-1, giorno);
        cal.setLenient (false);

	String SGiorno = ggStart.getText ();
	String SMese = mmStart.getText ();
	String SAnno = yyStart.getText ();

//Parsing:
	giorno=Integer.parseInt(SGiorno);
	mese=Integer.parseInt(SMese);
	anno=Integer.parseInt(SAnno);

//Le stringhe sono oggetti "immutabili". Non esiste un metodo setText()
// né esiste un qualche altro metodo che modifica lo stato dell'oggetto String.
//	String inDate = giorno + "/" + mese + "/" + anno;
        try {
	cal.get (Calendar.DATE);
	      testoOutput.setText("Data corretta.");

	} catch (IllegalArgumentException e) {
	      testoOutput.setText("Data errata.");
	}
Il problema sta nel fatto che in compilazione la risposta è:

myCalendar8.java:199: e is already defined in actionPerformed(java.awt.event.ActionEvent)
} catch (IllegalArgumentException e) {
^
1 error
e non riesco a capire che errore sia...magari è anche banale, ma essendo giovane il mio approcio con java non è così semplice...
 
  • Like
Reactions: ottofonsuppost
Il problema è dovuto ai parametri che passi al metodo costruttore del GregorianCalendar. In pratica passi come parametri anno, mese e giorno dei valori inconsistenti. Per risolvere il problema devi passare valori congruenti (non esiste un giorno 0) oppure devi impostare il setLenient() a true. Così facendo Java reinterpreta i valori passati, in pratica passandogli 0 come giorno lui lo considera il giorno precedente al primo del mese, per cui il 30 del mese precedente e così anche per mese ed anno.
 
  • Like
Reactions: ottofonsuppost
Oooook, grazie...ora, dopo tante peripezie ci sono arrivato!! :cool:
Posto qui sotto il codice corretto per chi potesse averne bisogno:
Codice:
    // la classe che definisce il ricevitore di eventi usato 
    // dal bottone Controllo data:
    class Receiver3 implements ActionListener {
	public void actionPerformed(ActionEvent e) {

	String SGiorno = ggStart.getText ();
	String SMese = mmStart.getText ();
	String SAnno = yyStart.getText ();

//Parsing:

	int day=Integer.parseInt(SGiorno);
	int month=Integer.parseInt(SMese);
	int year=Integer.parseInt(SAnno);

        GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
        cal.setLenient (false);

//Le stringhe sono oggetti "immutabili". Non esiste un metodo setText()
// né esiste un qualche altro metodo che modifica lo stato dell'oggetto String.

        try {
	cal.get (Calendar.DATE);
	      testoOutput.setText(day +"/"+ month +"/"+ year + ": data corretta.");

	} catch (IllegalArgumentException i) {
	      testoOutput.setText(day +"/"+ month +"/"+ year + ": data errata.");
	}
      }
    }
grazie mille!!!!!:fonzie:
 
  • Like
Reactions: ottofonsuppost

Discussioni simili