Mam program JavaFX 8 (dla JavaFXPorts cross platfrom), który został w znacznej części sformułowany w ramce, aby zrobić to, co chcę, ale powstał jeden krok. Program odczytuje plik tekstowy, zlicza linie, aby ustalić losowy zakres, wybiera losową liczbę z tego zakresu i odczytuje tę linię w celu wyświetlenia.Zmienne lokalne, do których odwołuje się wyrażenie lambda, muszą być ostateczne lub efektywne.
The error is: local variables referenced from a lambda expression must be final or effectively final
button.setOnAction(e -> l.setText(readln2));
jestem trochę nowy w Javie, ale wydaje się, czy mogę użyć lambda albo nie mieć kolejnej linii losowe wyświetlanie w Label l
, mój button.setOnAction(e -> l.setText(readln2));
linia spodziewa wartości statycznej.
Jakieś pomysły, w jaki sposób mogę poprawić to, co mam, aby po prostu nacisnąć następną wartość wyświetlacza var readln2 za każdym razem, gdy naciskam przycisk na ekranie?
góry dzięki i tu jest mój kod:
String readln2 = null;
in = new BufferedReader(new FileReader("/temp/mantra.txt"));
long linecnt = in.lines().count();
int linenum = rand1.nextInt((int) (linecnt - Low)) + Low;
try {
//open a bufferedReader to file
in = new BufferedReader(new FileReader("/temp/mantra.txt"));
while (linenum > 0) {
//read the next line until the specific line is found
readln2 = in.readLine();
linenum--;
}
in.close();
} catch (IOException e) {
System.out.println("There was a problem:" + e);
}
Button button = new Button("Click the Button");
button.setOnAction(e -> l.setText(readln2));
// error: local variables referenced from a lambda expression must be final or effectively final
Najprostszym sposobem rozwiązania tego problemu jest użycie SimpleStringProperty zamiast String do przechowywania 'readln2'. – eckig
Dzięki. Czy mógłbyś trochę rozwinąć? Patrząc na to, nie jestem pewien jak sprawić, by był zgodny ze sposobem, w jaki czytam/korzystam z zewnętrznego pliku. – Jeff
Moim zdaniem, to pytanie powinno zostać ogolone do 4 linii kodu. Ok, 15 linii - w końcu to java! ;-) Być może podczas tego ćwiczenia redukcyjnego odpowiedź stałaby się jasna dla samego plakatu. –