Отключение Java + Windows RDP вызывает исключение Java Headless ExceptionJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Отключение Java + Windows RDP вызывает исключение Java Headless Exception

Сообщение Anonymous »

Начиная с Java 17.0.12 и 21.0.4 Java завершается сбоем из-за исключения Headless при запуске приложения с полным графическим интерфейсом через RDP, и сеанс RDP отключается. Удаленный рабочий стол запущен, и к нему можно повторно подключиться. Все приложения, отличные от Java, по-прежнему работают и прекрасно обновляют свой пользовательский интерфейс. Сбой происходит только в приложениях Java с графическим интерфейсом пользователя.Если программа Java пытается выполнить операции с графическим интерфейсом, например создать модальный индикатор выполнения, в то время как сеанс RDP отключен, выдается исключение Headless, хотя среда не обезглавлена, она просто отключена.
Похоже, это связано с https://bugs.openjdk.org/browse/JDK-8340992 и https://bugs.openjdk.org/browse/JDK-8336862, но обходных путей не предусмотрено.
Есть ли обходной путь, который можно реализовать во время выполнения?
Единственные обходные пути, которые мы можем придумать:
  • Переписать все на другом языке. Это немалая задача.
  • Понизьте все экземпляры Java/JDK до версии 21.0.3 и не применяйте никаких обновлений безопасности.
  • Прекратите всю работу и начните заново за любые отключения RDP, вызванные намеренным отключением пользователя, проблемами с Интернетом и т. д. Это то, где мы сейчас находимся, и это вызывает проблемы в работе.

Это может привести к отключению RDP.

также, похоже, является нарушением «контракта», где незначительный момент выпуски не должны вызывать критические изменения.
В основном мы используем простые приложения, состоящие из JFrames, JTextComponents и ProgressMonitor с парой самостоятельных -размещенные приложения JediTerm.
Код, демонстрирующий проблему. ДОЛЖЕН ЗАПУСКАТЬ В СЕССИИ RDP:

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

import javax.swing.*;
import java.awt.*;

//TIP To Run[/b] code, press  or
// click the  icon in the gutter.
public class Main {
public static void main(String[] args) throws InterruptedException {
var delay = 10;
var isHeadless = GraphicsEnvironment.isHeadless();
System.out.printf("1) Is headless: %s.%n", isHeadless);
System.out.printf("Sleeping %,d seconds.%n", delay);
System.out.printf("""
DISCONNECT YOUR REMOTE DESKTOP CONNECTION NOW!
RECONNECT AFTER %,d SECONDS.
""", delay);
Thread.sleep(delay * 1_000);
System.out.println("Drawing progress bar");
ProgressMonitor p = new ProgressMonitor(null, "Test progressbar", "My note", 0, 100);
for (int i = 0; i < 100; i++) {
p.setProgress(i);
Thread.sleep(250);
}
isHeadless = GraphicsEnvironment.isHeadless();
System.out.printf("2) Is headless: %s.%n", isHeadless);

//TIP Press  with your caret at the highlighted text
// to see how IntelliJ IDEA suggests fixing it.
System.out.printf("Hello and welcome!");

for (int i = 1; i 

Подробнее здесь: [url]https://stackoverflow.com/questions/79265762/java-windows-rdp-disconnect-causes-java-headless-exception[/url]
Ответить

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

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

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

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

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