La variable locale finale ne peut pas être affectée, car elle est définie dans un type englobant
ratingS = new JSlider(1, 5, 3);
ratingS.setMajorTickSpacing(1);
ratingS.setPaintLabels(true);
int vote;
class SliderMoved implements ChangeListener {
public void stateChanged(ChangeEvent e) {
vote = ratingS.getValue();
}
}
ratingS.addChangeListener(new SliderMoved());
Si j'écris le code ci-dessus Eclipse me dit ceci:
Ne peut pas se référer à un non-final variable de vote à l'intérieur d'un intérieur de classe
défini dans un autre méthode
Mais si j'ajoute final avant int vote il me donne cette erreur:
La finale locale de vote variable ne peut pas être affectée, car elle est définie dans un enfermant type
Alors, comment le résoudre?
source d'informationauteur smartmouse
Vous devez vous connecter pour publier un commentaire.
Bien, le truc standard est d'utiliser un int tableau de longueur. Faire de la var final et à écrire à
var[0]
. Il est très important de vous assurer de ne pas créer une base de données de la course. À l'aide de votre code comme exemple:Depuis tout ce sera happenenig sur l'EDT, y compris le rappel de l'invocation, vous devriez être en sécurité. Vous devriez également envisager l'utilisation de la classe anonyme:
Déplacer
vote
àSliderMoved
:MODIFIER
Ou sinon, passer à un modèle de classe pour le changement écouteur
Person
est utilisé comme suit:J'ai finalement résolu de déclarer voter en tant que variable d'instance (privés) dans la classe principale.
Réglage du Compilateur niveau de conformité à 1,8 travaillé pour moi de résoudre un problème similaire. Je ne comprends pas la raison, mais vous pouvez essayer cette.
Comment cela fonctionne:
Clic droit sur le projet - > Propriétés - > Java Compilateur. Et dans le compilateur java fenêtre propriétés, définissez le compilateur niveau de conformité à 1,8.