Seltsames Java-GUI-Verhalten auf Windows-PCs durch SSH-Tunneling zu/von Linux-Rechnern

Seltsames Java-GUI-Verhalten auf Windows-PCs durch SSH-Tunneling zu/von Linux-Rechnern

Ich habe ein sehr seltsames Problem mit einer Java-GUI, die ich bei der Arbeit erstellt habe. Es ist so seltsam, dass ich nicht einmal weiß, wo ich anfangen soll, nach Hilfe zu suchen!!

Wir haben ein eigenständiges System an einem externen Standort, das aus einem Windows-PC mit XP und einer SuSE-Linux-Maschine besteht. Ich habe eine Java-GUI erstellt, die einige Bash-Skripte auf der Linux-Maschine ausführt. Die GUI wird von der Windows-Maschine aus gestartet, da der Benutzer kein Linux-Benutzer ist. Die GUI wurde erstellt, um Skripte zu ersetzen, die dem Benutzer Eingabeaufforderungen für die Eingabe in die Hauptverarbeitungsskripte präsentierten.

Der Benutzer klickt auf ein Symbol auf dem Windows-Desktop, das eine DOS-Batchdatei (*.bat) ausführt. Die Batchdatei verwendet plink mit einer gespeicherten PuTTY-Sitzung, um eine Verbindung zur Linux-Maschine herzustellen und einen Befehl „java -jar XXX.jar“ auszuführen, um die GUI zu starten. Die GUI wird auf dem Windows-PC angezeigt, da auf dem Windows-PC Cygwin/XX Server ausgeführt wird.

Okay. Jetzt kommt das Merkwürdige. Wenn ich die GUI an der Stelle lasse, an der sie zuerst angezeigt wurde, ist alles in Ordnung. Wenn ich die GUI verschiebe, funktionieren die Pulldown-Menüs (Dropdown-Kombinationsfelder und Menüleisten-Pulldowns) nicht mehr richtig. Und NUR die Pulldown-Menüs. Alles andere funktioniert einwandfrei (Drucktasten, Textfelder, ...). Wenn ich die GUI zurück an ihre ursprüngliche Stelle verschiebe, funktioniert alles einwandfrei. Wenn ich den Mauszeiger anklicke, gedrückt halte und dorthin ziehe, wo die GUI zuerst angezeigt wurde (und die GUI dort lasse, wo ich sie hin verschoben habe), funktionieren die Pulldown-Menüs einwandfrei.

Zuerst dachte ich, ich hätte ein Problem mit der Art und Weise, wie ich die Pulldown-Menüs initialisierte, aber jetzt bin ich mir nicht mehr so ​​sicher. Ich frage mich, ob mit den Windows <-> Putty <-> Linux- oder Xwin-Setups etwas Seltsames vor sich geht.

Das Problem kann ich nicht lösen, weil ich dieses Verhalten bei der Arbeit nicht reproduzieren kann. Leider haben wir keine exakte Kopie des externen Systems. Ich teste/erstelle diese GUI auf einer XP-zu-Debian-Linux-Maschine.

Hat irgendjemand so etwas gesehen? Irgendeine Vermutung, was hier vor sich gehen könnte?

Milliarde Dank

Rechnung

Antwort1

Ich glaube nicht, dass es eine gute Idee ist, Java über die X-Umleitung auszuführen.

Warum installieren Sie das Java-Programm nicht auf dem Windows-PC und verwenden es zum Starten plinkund Ausführen des Befehls? Wenn Sie den Quellcode des Java-Programms haben, sollte es trivial sein, eine Klasse hinzuzufügen, die umschließt und ersetzt Runtime.getRuntime().exec()und plinkvor die Befehlszeile stellt. Dann können Sie vielleicht ein wenig an der Klasse arbeiten, damit sie eine plinkSitzung für alles verwendet. Dann können Sie auch eine andere Klasse mit derselben Schnittstelle erstellen, die aber nicht hinzufügt, plinksodass Ihr Java-Programm sowohl unter Windows als auch unter Linux ausgeführt werden kann.

Antwort2

Mit Java 1.7 können Sie -Dsun.java2d.xrender=truebei der Verwendung eines Remote-X-Displays Java erkennen, dass es in X ausgeführt wird. Siehehttp://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html

Antwort3

Es könnte etwas mit der Hardwarebeschleunigung von Java 2D, dem Grafiksystem von Java, zu tun haben.

Versuchen Sie, die Hardwarebeschleunigung zu deaktivieren, indem Sie die folgende Befehlszeilenoption des Java-Prozesses hinzufügen:

-Dsun.java2d.d3d=false

Es gibt auch eine vollständige Referenz zu Java 2D-EinstellungenHier. Wenn Sie Direct 3D ausschalten, wird die Benutzeroberfläche langsamer, aber bei einfachen Benutzeroberflächen mit nur Menüs und ohne Animationen sollte das keine Rolle spielen.

verwandte Informationen