Threads: Lokal definierte variable in einem einschließenden Bereich muss endgültig sein, oder effektiv final

Habe ich meine main-Klasse ausgeführt, in den main Methode. Es läuft ein Prozess, der potenziell braucht eine Menge Zeit in Anspruch, so habe ich eine andere Methode verhindern, dass der Prozess: es wirft einfach ein flag, das macht den ganzen Prozess zu stoppen:

public void stopResolutionProcess() {
    stop = true;
}

Dieser ist der call, der ausgeführt wird, den großen Prozess:

boolean solutionFound = tournament.solve();

So, bevor es richtig, ich brauche zu laufen, einen sekundären thread zu nennen stopResolutionProcess():

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Stop resolution process? (Y/N): ");
        String answer = sc.next();
        if (answer.equalsIgnoreCase("y")) {
            tournament.getSolver().stopResolutionProcess(); //error here
        }
    }
});

Aber ich erhalte eine Fehlermeldung in der letzten Zeile. Es sagt:

Lokale variable Turnier definiert, in einer umschließenden scope muss endgültig sein
oder effektiv final

Welchen Ansatz sollte ich nehmen um dieses problem zu lösen, um die Methode zu testen, dass der Prozess beendet?

Wie der Fehler schon sagt, Sie sollte es final oder kopieren Sie den Wert in eine variable, die endgültig ist.
"Lokale variable tournament definiert, die in einem umschließenden scope muss endgültig sein, oder effektiv final" Also, die tournament Deklaration von Variablen wäre eine offensichtliche Sache zu gehören, in Frage.

InformationsquelleAutor dabadaba | 2016-04-10

Schreibe einen Kommentar