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:
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
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.[b]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 [b]die Umgebung nicht kopflos[/b] 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: [list] [*]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. [/list] 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]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
Ich wurde gebeten, an einem kleinen Werkzeug zu arbeiten, das einer meiner Vorgänger vor langer Zeit in .NET 3.5 erstellt hat (wenn es wichtig ist, verwendet das Tool WinForms). Das Hauptmerkmal...
Ich möchte eine Anwendung erstellen, die die Verbindung des Telefons zum Ladegerät steuert. Die Anwendung sollte sich an die Zeit des Verbindens und Trennens des Ladegeräts erinnern. Ich verwende den...
Ich versuche, diese RDP -Bibliothek zu verwenden: Aber ich verstehe nicht, wie ich mit Port, Anmeldung und Passwort eine Verbindung zum Host herstellen kann. In diesem Code gibt es kein Login und...
Wir haben eine Anwendung auf Winui3, Android und iOS. Es verwendet mvvmcross als Plattform zum Verwalten der ViewModels. Die spezifische Situation lautet wie folgt:
Ich mache ein Projekt, das Blindenschrift in Text umwandeln würde. Ich habe den Code zum Identifizieren der Braille-Punkte aus dem Bild geschrieben, kann aber nicht herausfinden, wie ich die...