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)
A voir également:
- Méthode de type de retour String
- Clear type - Guide
- Retour à la ligne excel mac - Guide
- Type de ram - Guide
- Incompatibilité de type vba ✓ - Forum Excel
- Retour à la ligne chatgpt - Forum PHP
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 :
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...
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...