Die Trennung von Java und Windows RDP führt zu einer Java Headless ExceptionJava

Java-Forum
Guest
 Die Trennung von Java und Windows RDP führt zu einer Java Headless Exception

Post by Guest »

Ab Java 17.0.12 und 21.0.4 schlägt Java mit einer Headless-Ausnahme fehl, wenn eine vollständige GUI-App über RDP ausgeführt wird und die RDP-Sitzung getrennt wird. Der Remote-Desktop läuft und kann erneut verbunden werden. Alle Nicht-Java-Apps laufen weiterhin und aktualisieren ihre Benutzeroberfläche problemlos. Es sind nur Java-GUI-Apps, die abstürzen.Wenn das Java-Programm versucht, GUI-Vorgänge wie das Erstellen eines modalen Fortschrittsbalkens auszuführen, während die RDP-Sitzung getrennt ist, wird eine Headless-Ausnahme ausgelöst. obwohl die Umgebung nicht kopflos ist, sondern nur getrennt.
Dies scheint mit https://bugs.openjdk.org/browse/JDK-8340992 zusammenzuhängen Und https://bugs.openjdk.org/browse/JDK-8336862, aber es werden keine Problemumgehungen bereitgestellt.
Gibt es eine Problemumgehung, die zur Laufzeit durchgeführt werden kann?
Die einzigen Workarounds, die uns einfallen können, sind:
  • Alles in einer anderen Sprache neu schreiben. Kein kleines Unterfangen.
  • Downgraden Sie alle Java/JDK-Instanzen auf 21.0.3 und wenden Sie keine Sicherheitsupdates an.
  • Verlieren Sie alle Arbeit und beginnen Sie von vorne für alle RDP-Trennungen, die durch absichtliche Benutzertrennung, Internetprobleme usw. verursacht werden. Hier sind wir jetzt und es verursacht Produktionsprobleme.

Dies würde Scheint auch ein Bruch des „Vertrags“ zu sein, bei dem kleinere Punkte veröffentlicht werden sollen keine bahnbrechenden Änderungen verursachen.
Wir verwenden hauptsächlich einfache Apps, die aus JFrames, JTextComponents und ProgressMonitor mit ein paar selbständigen gehostete JediTerm-Anwendungen.
Code, der das Problem demonstriert. MUSS IN RDP-SITZUNG LAUFEN:

Code: Select all

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 Der Fehler scheint im nativen Code zu liegen, der sich zwischendurch geändert hat 21.0.3 und 21.0.4. Ich war nicht in der Lage, einen Workaround zu entwickeln, da Monkey-Patching eigentlich keine Java-Funktion ist.
[*]Erzwungenes Downgrade: Wir haben alle physischen Windows-Rechner auf 21.0.3 und zurückgestuft Das Problem scheint nicht mehr vorhanden zu sein.
[/list]
-Mike/NewsRx

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post