Изменения JavaFX в сцене не обновляются на виртуальной машине Windows Hyper-V после повторного подключенияJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Изменения JavaFX в сцене не обновляются на виртуальной машине Windows Hyper-V после повторного подключения

Сообщение Anonymous »

Я написал JavaFX-приложение, которое нужно запускать в разных средах. В данном конкретном случае я заметил ошибку при использовании программы на виртуальной машине. Когда я запускаю свою программу, все работает нормально. Но когда я пытаюсь с ним взаимодействовать, после закрытия/отключения от виртуальной машины графический интерфейс не обновляется. Я заметил, что FX-Thread и все фоновые потоки все еще работают. Я по-прежнему могу изменять размер окна и взаимодействовать с заголовком, но изменение размера приводит к черному цвету.
Я использую:
  • OpenJDK 19
  • OpenJFX 16
  • Hyper-V
  • ВМ: Windows 10 li>
Я не нашел в своем коде ничего плохого, поэтому написал небольшую программу, чтобы проверить, связана ли проблема с самим JavaFX. Код, который я написал для тестирования:

Код: Выделить всё

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class ArchivApp extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
buildAndOpenStage(primaryStage);
}

private void buildAndOpenStage(Stage stage) {
stage.setResizable(true);
BorderPane bp = new BorderPane();
TextField tf = new TextField("NewStage");
stage.titleProperty().bind(tf.textProperty());
bp.setCenter(tf);
stage.setScene(new Scene(bp, 500, 500));

tf.textProperty().addListener(ev -> {
if (tf.textProperty().isEmpty().get()) {
BorderPane borderPane = new BorderPane(new Label("New Scene in old stage"));
stage.setScene(new Scene(borderPane, 200, 200));
stage.hide();
stage.show();

buildAndOpenStage(new Stage());
}
});

stage.show();
}
}
Я привязал заголовок этапа к текстовому полю, чтобы проверить, работает ли приложение или доступно ли для него взаимодействие. Я также создал новую стадию, когда текстовое поле очищается (потому что я думал, что проблема может быть связана с открытой стадией).
Когда я запускаю приложение, все работает нормально. Но если я оставлю приложение открытым, отключусь от виртуальной машины, снова подключусь к нему и буду взаимодействовать с ним, графический интерфейс больше не будет обновляться.
Я прикрепил гифку, которая показывает странное поведение :
Изображение

Создание нового этапа также не исправляет поведение (метка должна отображаться, но ничего не отображается):
Изображение

Вещи, которые мне показались эффективными:
Использование OpenJFX 21 вместо 16
или
Добавление "-Dprism.order=sw" в качестве аргумента JVM
Это известная ошибка или я что-то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/783 ... -reconnect
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»