Méthode de type de retour String
Akrouti Ezzeddin
Messages postés
63
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Voila le code ou est l'erreur s'il vous plait.
Le code Erreur:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot refer to a non-final variable dur inside an inner class defined in a different method
at client.Session.durationSession(Session.java:330)
at client.Session.main(Session.java:414)
Voila le code ou est l'erreur s'il vous plait.
public String durationSession() throws ParseException
{
final String date=(String)this.determinerDate();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
final Date d1 = format.parse(date);
String dur="";
int delay = 1000; // Première exécution dans 5 secondes
int period = 1000; // Répéter pour 1 min
final Timer timer = new Timer();
timer.scheduleAtFixedRate(
new TimerTask()
{public void run() { try {
Session s=new Session();
Date d0 = null;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1=(String)s.determinerDate();
d0 = format.parse(date1);
long hoursDifference = ((d0.getTime() - d1.getTime()));
int secondes=(int) (hoursDifference/1000);
int minutes=secondes/60;
int heures=secondes/3600;
int secrestes=secondes%60;
dur= heures+":"+minutes+":"+secrestes;
}catch(Exception e)
{e.printStackTrace();
}
}
},delay, period);
return dur;
}
Le code Erreur:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot refer to a non-final variable dur inside an inner class defined in a different method
at client.Session.durationSession(Session.java:330)
at client.Session.main(Session.java:414)
1 réponse
-
Tu ne peux pas modifier ta variable "dur" à l'intérieur de la classe TimerTask, car pour y faire référence elle doit être déclaré "final" comme le sont d'ailleurs les autres.
Cependant avec un String tu ne vas pas t'en sortir car il est immuable, c'est à dire qu'il est impossible de modifier le contenu de la String sans changer sa référence...
Une solution pourrait être d'utiliser un StringBuffer :
final StringBuffer dur = new StringBuffer(); // ... dur.replace(0,replace.length(), heures+":"+minutes+":"+secrestes); // ... return dur.toString();
Remarque :
Je ne sais pas ce que tu veux faire, mais a priori le return, va renvoyer une chaîne vide, puisque la méthode run() qui lui donne sa valeur, ne sera appelé que plus tard...