Я работаю над приложением интерактивной сортировки в JavaFX:Java - летучий переменная не обновляется
- Числа представлены в виде прямоугольников
- Каждый раз два числа меняются местами прямоугольники местами (с помощью временной шкалы - анимация)
Это один из алгоритмов сортировки:
public class BubbleSort implements SortAlgorithm {
private volatile Boolean swaping;
public void sort(double[] array, CompareFunction compareFunction, Model model, Controller controller) {
Boolean ord;
int i;
double aux;
swaping = false;
do {
ord = true;
for (i = 0; i < array.length - 1; i++) {
if (compareFunction.compare(array[i], array[i + 1]) == false) {
while (swaping);
swaping = true;
aux = array[i];
array[i] = array[i + 1];
array[i + 1] = aux;
ord = false;
controller.swapRectangles(model.getRectangles().get(i), model.getRectangles().get(i + 1), this);
}
}
} while (ord == false);
}
public void setSwaping(Boolean swaping) {
this.swaping = swaping;
}
}
Это прототип метода swapRectangles:
public void swapRectangles(final Rectangle rectangle1, final Rectangle rectangle2, final BubbleSort bubbleSort)
И когда сроки заканчивается I udpate "swaping" значение:
timeline2.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
setRectangleFill(rectangle2, Color.BLACK);
rectangle2.setX(rectangle1X);
bubbleSort.setSwaping(false);
}
});
Проблема, что "swaping" переменная никогда не обновляется (метод setSwaping никогда не вызывается).
Знаете ли вы, почему?
Как вы знаете, что не обновляете? –
Потому что приложение замерзает. После того, как «swaping» станет «true», он не переходит из «while (swaping)». –