2010-04-18 62 views
4

我在我的計算機上寫的一些搖擺代碼在我的同事的計算機,我的電腦和我的筆記本上有所不同。爲什麼Java Swing在不同系統上表現不同?

我想知道,有什麼我可以做我的Swing應用程序在每臺計算機上的表現都一樣嗎?

我想確保我在我的計算機上測試過的算法在我的客戶端計算機中以相同的方式工作。

E.g. Problem to focus JTextField在我的Windows XP筆記本電腦中工作正常,但在Windows XP的合作計算機中無法正常工作,無論是在使用Ubuntu的工作計算機中。

obs。具體的JTextField問題不是這個問題的主題。

+7

難道你不知道Java的意思是「寫一次,到處測試」? – cletus 2010-04-18 15:30:18

+0

@cletus我開始同意... – 2010-04-18 15:33:58

+0

沒有具體問題?你的意思是這是一個咆哮/巨魔? – 2010-04-18 16:37:42

回答

4

與不同平臺上的應用程序搖擺的問題是常見的,它們是由一個簡單的事實,無論Java提供了什麼樣的抽象級別它有在某些時候與底層操作系統的本機組件打球造成的。儘管Swing事件只使用窗口(框架)並自行繪製所有內容 - 差異非常常見。

我開發了一個多平臺Swing應用程序 - 而Windows上的用戶報告了Linux用戶沒有的各種問題,反之亦然。可悲的是,這樣的問題沒有銀彈 - 廣泛的測試和討厭的修復是城裏唯一的遊戲。

而且在可插拔的外觀和感覺方面,所有東西都特別有問題和髒。例如 - 使用金屬或靈氣調整JSplitPane的大小非常快(如預期的那樣),但是如果使用GTK + plaf,則一切都會變得糟糕透頂。這是一個更嚴重的(性能)的問題 - 視覺問題(缺少邊界,組件不正確地安裝容器等)沒有結束。儘管這一切擺的仍然是多平臺桌面應用程序的最佳選擇之一。

+0

@Bozhidar Batsov:+1 ...我也是我在Windows/OS X上發佈了一個Swing應用程序,問題很瘋狂。那些喝掉了Swing cool-aid並且從來沒有在一個複雜的多平臺Swing應用上工作的人們不應該回答這個問題,也不應該對此問題發表評論:) – SyntaxT3rr0r 2010-04-18 18:37:13

+0

它最糟糕。在我發佈的例子中,swing在2個Windows系統中表現不同。 – 2010-04-19 12:08:49

2

我不知道,是有什麼我可以做 到我的Swing應用程序的行爲 同樣在每一臺計算機?

我正在被髮貨OS X/Windows的/ Linux的所以就像Bozhidar回答,這些問題都太現實一個複雜的Java Swing應用程序。對於某些組件,如果你碰巧有一些UI設計/編程技巧,你可以簡單地編寫你自己的組件:我意識到這可能不是一個有用的答案,但它的工作原理。例如,我們需要一個下拉式的「find-as-you-type」彈出式列表(就像在Google主搜索頁上開始搜索時出現的那樣),它們在Linux上看起來和工作方式都是一樣的/窗/ OS X.試圖無數如火如荼的獨特特性的「解決方案」,將不工作無處不在(如,你猜怎麼着,重點問題;)後,我們決定乾脆「從scractch」寫我們自己的分量。

我們既可以在OS上攔截鼠標和鍵盤事件X /窗/ Linux的:我們可以寫,不僅看起來一個組成部分,但也行爲同樣在所有三個平臺。

除了「發現你類型」,我們還編寫了我們自己的工具提示彈出組件,一個雙重進度條(用於在單一欄中顯示生產者/消費者風格進度的進度條)還有一個涉及幾個「文本字段」的複雜組件,當我們使用Swing嘗試使用Swing(在不同的平臺上以不同的方式破解,如奇怪的焦點問題或插入符號未顯示等)時,這些內容是非常複雜和破裂的。所以我們「變髒」並且自己重寫了整個組件。

結果?同樣的工作在所有平臺上的Java地方可以給你的鼠標和鍵盤事件通知...

我知道這可能不是你想聽到的:我恰好在兩場比賽UI和移動應用程序UI已經奏效回那些日子和我有一些圖形技能,所以對我來說編寫好看的UI組件並不「困難」。

可悲的是,如果你想一些Java UI組件的外觀和行爲相同的所有平臺上,它有時你唯一的選擇......

+0

我也是+1。我感到你的痛苦 - 我自己寫了很多自定義組件。而Swing的焦點遍歷策略只能被描述爲「黑魔法」......我的其他「最喜歡的」多平臺問題是剪貼板集成和系統托盤集成...... – 2010-04-18 18:59:10

+0

最糟糕的是,我發佈的示例顯示,甚至在2個Windows系統中,揮杆應用可能會有所不同。 – 2010-04-19 12:20:17

0

我想有一個肯定的算法我已經 在我的電腦測試將在我的客戶端計算機中以相同的方式運行

「算法」應該可以正常工作。

當您依賴事件的順序時,您會遇到問題,這可能在各種平臺上有所不同。我知道最常見的一種方法是按住一個鍵,以便重複:

a)在Windows上,您將獲得keyPressed,keyPressed,keyPressed,.... keyReleased。

二)在Unix上你的keyPressed,調用keyReleased,的keyPressed,調用keyReleased ...

順便說一句評論就如我在「文本框」建議是否發佈作品還是不是很好。正如我所提到的,我沒有Ubuntu平臺來測試它,所以我對結果很好奇。

相關問題