Странное поведение Java GUI на ПК с Windows через SSH-туннелирование на/с Linux-машины

Странное поведение Java GUI на ПК с Windows через SSH-туннелирование на/с Linux-машины

У меня очень странная проблема с Java GUI, который я создал на работе. Это так странно, что я даже не знаю, с чего начать искать помощь!!

У нас есть автономная система на удаленном объекте, состоящая из ПК с Windows, работающего на XP, и машины SuSE Linux. Я создал графический интерфейс Java, который запускает некоторые скрипты bash на машине Linux. Графический интерфейс запускается с машины Windows, поскольку пользователь не является пользователем Linux. Графический интерфейс был создан для замены скриптов, которые предоставляли пользователю запросы командной строки для предоставления входных данных основным скриптам обработки.

Пользователь нажимает на иконку на рабочем столе Windows, которая запускает пакетный файл DOS (*.bat). Пакетный файл использует plink с сохраненным сеансом PuTTY для подключения к машине Linux и выполнения команды "java -jar XXX.jar" для запуска GUI. GUI отображается на ПК с Windows, поскольку на ПК с Windows запущен Cygwin/XX Server.

Хорошо. Теперь о странностях. Если я оставляю GUI в том месте, где он изначально появился, все в порядке. Если я перемещаю GUI, то выпадающие меню (раскрывающиеся поля со списками и выпадающие меню) больше не работают должным образом. И ТОЛЬКО выпадающие меню. Все остальное работает нормально (кнопки, текстовые поля, ...). Если я перемещаю GUI обратно в исходное место, все работает нормально. Если я нажимаю, удерживаю и перетаскиваю курсор мыши туда, где изначально появился GUI (оставляя GUI там, где я его переместил), выпадающие меню работают правильно.

Сначала я думал, что проблема в том, как я инициализировал выпадающие меню, но теперь я в этом не уверен. Интересно, происходит ли что-то странное с настройками windows <-> putty <-> linux или Xwin.

Невозможность решить эту проблему объясняется тем, что я не могу воспроизвести это поведение на работе. К сожалению, у нас нет точной копии внешней системы; я тестирую/собираю этот GUI на машине XP to Debian Linux.

Кто-нибудь видел что-нибудь подобное? Есть предположения, что здесь может происходить?

Спасибо миллиард раз

Счет

решение1

Я не думаю, что запуск Java через перенаправление X — хорошая идея.

Почему бы вам не поместить программу Java на ПК с Windows и не использовать ее для запуска plinkи выполнения команды? Если у вас есть исходный код программы Java, то будет просто добавить класс, который оборачивает и заменяет Runtime.getRuntime().exec()и помещает plinkперед командной строкой. Затем, возможно, вы сможете немного поработать над классом, чтобы он использовал одну plinkсессию для всего. Затем вы также можете создать другой класс с тем же интерфейсом, но не добавлять , plinkчтобы ваша программа Java могла работать как на Windows, так и на Linux.

решение2

С Java 1.7 вы можете использовать -Dsun.java2d.xrender=trueпри использовании удаленного X Display. Это позволяет Java знать, что он запущен в X. Смотритеhttp://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html

решение3

Возможно, это связано с аппаратным ускорением Java 2D, графической системы Java.

Попробуйте отключить аппаратное ускорение, добавив следующую опцию командной строки процесса Java:

-Dsun.java2d.d3d=false

Также имеется полная справка по настройкам Java 2D.здесь. Отключение Direct 3D замедлит работу пользовательского интерфейса, но для простых пользовательских интерфейсов, содержащих только меню и не имеющих анимации, это не должно иметь значения.

Связанный контент