2017-12-17 5 views
-3

Ich versuche, eine nicht stören Funktion für meine Benachrichtigung in der Taskleiste zu machen und ich versuche, eine if-Anweisung zu machen, die geht, wenn Variable dnd = false dann den System-Tray-Namen in "Nicht stören - auf" ändern und einstellen dnd zu wahr else gesetzt dnd = false aber unter den dnd = true; und dnd = false; es hat eine rote Linie und sagt "Lokale Variable dnd in einem umschließenden Umfang definiert muss endgültig oder effektiv endgültig sein" und ich bin mir nicht sicher, was zu tun ist. Bitte helfen Sie. mein Code
hier:kann Variablenwert nicht innerhalb if-Anweisung ???? java

boolean dnd = false; 
doNotDisturb.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (dnd == false) { 
      dnd = true; 
      doNotDisturb.setName("Do Not Disturb - on"); 
     } else { 
      dnd = false; 
     } 
    } 
}); 
+0

Lösung hängt davon ab, was Sie wirklich tun möchten. Sie können der lokalen Variablen, die außerhalb der anonymen Klasse deklariert wurde, keinen neuen Wert * zuweisen. Sie könnten also versuchen, diese Variable in eine anonyme Klasse zu verschieben oder sie in ein Feld der Oberklasse zu bringen oder statt dessen einen Booleschen Wrap in einem anderen Typ zu verwenden und ihren Zustand (durch Getter und Setter) zu ändern. – Pshemo

+0

Haben Sie nach der Fehlermeldung gesucht? Bitte tun Sie dies * vor * fragen. –

Antwort

0

Die Variable dnd muss endgültig oder effektiv endgültig sein (dies ist der Fall). Aus diesem Grund können Sie auf einen Schließungskontext verweisen. Der Compiler möchte nicht, dass Sie dnd aus der Closing- oder anonymen Klasse neu zuweisen.

Sie können das Problem lösen, indem sie entweder

  1. Wrapping in einem Objekt dnd:

    DndConfig dndConfig = new DndConfig();

    und in der anonymen Klasse:

    dndConfig.dnd = true; //your logic

  2. Herstellung dnd ein Instanzfeld der Hauptklasse.

Verwandte Themen