Изображения исчезают при сворачивании окон в приложение JavaFX - PullRequest
0 голосов
/ 12 июня 2018

Я исправляю приложение 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 час.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...