Я исправляю приложение JavaFX на JDK 8. Приложение показывает несколько изображений, используя что-то вроде «jLabel.setIcon (new Image (...))».Я знаю, что это компонент для отображения изображений в JavaFX, но это не проблема (потому что я не могу изменять ни эту часть из исходных файлов, ни из файлов FXML).
Моя проблема в том, когда минимизировать илиизмените окно ((используя ALT + TAB)) и подождите некоторое время (даже до 1 часа), чтобы вернуться к окну, изображения больше не отображаются.Однако, если я переместлю окно, изображения вернутся.
В попытке решить проблему (независимо от использования кнопки сворачивания или ALT + TAB) я добавил в финал метода init ()этот фрагмент кода:
public void init() {
...
stage.focusedProperty().addListener((observable, oldvalue, newvalue) -> {
if (newvalue) repaintImages();
});
}
private void repaintImages() {
Object obj = new Object();
synchronized (obj) {
jLabel.repaint();
jLabel.revalidate();
obj.notify();
}
try {
obj.wait();
} catch (Exception e) {
}
}
Код перед запуском repaintImages () после фокусировки окон.Я использовал синхронизированный с идеей, чтобы гарантировать, что код выполняется в поточно-ориентированном (независимо от лага), в любом случае, это не решает проблему (изображения еще отсутствуют).После этого я изменяю этот код на использование runLater ():
public void init() {
...
stage.focusedProperty().addListener((observable, oldvalue, newvalue) -> {
if (newvalue) Platform.runLater(()->{repaintImages();});
});
}
private void repaintImages() {
Platform.runLater(() -> {
jLabel.repaint();
jLabel.revalidate();
});
}
И он тоже не работает.Пожалуйста, любые предложения приветствуются.
Я знаю, я написал длинный вопрос, но, возможно, можно было бы предложить переместить окно, когда оно сфокусировано.В этом случае, пожалуйста, дайте правильный способ сделать это, потому что я пытался и не работал тоже (с использованием synchronized и runLater ()).Это фрагмент кода, который я использовал для перемещения окна (помещая его в синхронизированный блок или в лямбда-функцию в runLater ()):
Translate elements = null;
if (positive_flag) {
elements = new Translate(1, 0, 0);
positive_flag = false;
} else {
elements = new Translate(-1, 0, 0);
positive_flag = true;
}
anchorPane.getTransforms().addAll(elements);
Наконец, рассмотрим это, чтобы доказать, работает ли какое-либо решение,Мне нужно подождать еще 1 час.