Windows PC 上透過 SSH 隧道往返 Linux 機器的奇怪 Java GUI 行為

Windows PC 上透過 SSH 隧道往返 Linux 機器的奇怪 Java GUI 行為

我在工作中建立的 Java GUI 遇到了一個非常奇怪的問題。這太奇怪了,我什至不知道從哪裡開始尋求幫助!

我們在異地有一個獨立系統,包括一台運行 XP 的 Windows PC 和一台 SuSE Linux 電腦。我建立了一個 Java GUI,可以在 Linux 機器上運行一些 bash 腳本。 GUI 是從 Windows 機器啟動的,因為使用者不是 Linux 人員。 GUI 的建置是為了替換向使用者提供命令列提示以向主處理腳本提供輸入的腳本。

使用者點擊 Windows 桌面上的一個圖標,該圖標運行 DOS 批次 (*.bat) 檔案。此批次檔使用 plink 和儲存的 PuTTY 會話連接到 Linux 電腦並執行「java -jar XXX.jar」命令來啟動 GUI。由於 Cygwin/XX Server 在 Windows PC 上執行,因此 GUI 顯示在 Windows PC 上。

好的。現在來看看奇怪之處。如果我將 GUI 留在最初彈出的位置,一切都會很好。如果我移動 GUI,則下拉式選單(下拉組合框和選單列下拉選單)將不再正常運作。並且只有下拉式選單。其他一切都正常運作(按鈕、文字欄位......)。如果我將 GUI 移回原來的位置,一切都會正常。如果我點擊、按住並拖曳滑鼠遊標到 GUI 最初彈出的位置(將 GUI 留在我移動的位置),下拉式選單將正常運作。

起初我以為我初始化下拉式選單的方式有問題,但我不再那麼確定了。我想知道 windows <-> putty <-> linux 或 Xwin 設定是否出現了奇怪的情況。

無法解決這個問題的原因是我無法在工作中複製這種行為。不幸的是,我們沒有場外系統的精確複製品;我正在 XP 到 Debian Linux 機器上測試/建立這個 GUI。

有人看過這樣的事情嗎?關於這裡可能發生的事情有什麼建議嗎?

感謝十億次

帳單

答案1

我不認為透過 X 重定向運行 Java 是一個好主意。

為什麼不把 Java 程式放在 Windows PC 上並用它來啟動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 圖形系統 Java 2D 的硬體加速有關。

嘗試透過新增 Java 進程的以下命令列選項來關閉所有硬體加速:

-Dsun.java2d.d3d=false

還有 Java 2D 設定的完整參考這裡。關閉 Direct 3D 會使 UI 變慢,但對於只有選單且沒有動畫的簡單 UI 來說,這應該不重要。

相關內容