2013-12-23 83 views
1

,我會說,這個問題已經在一定的深度,在得到回答開始:How can I get the screen resolution in java?的Java服務器端客戶端屏幕分辨率檢測

我的問題與其說是如何讓客戶端的屏幕分辨率,而是一個解釋Toolkit,GraphicsDevice和Javascript屏幕檢測返回的值,更重要的是它們爲什麼不一致。通過這一點,我希望能夠實現更好的方式來檢測用戶(客戶端)的屏幕分辨率。

我在自己的機器上進行測試,並設置了多種檢測客戶端屏幕分辨率的方法。我有雙顯示器設置,但我只在其中一臺顯示器上運行瀏覽器。第一臺顯示器是1920X1080,第二臺是1680X1050。

Toolkit toolkit = Toolkit.getDefaultToolkit(); 
Dimension dimension = toolkit.getScreenSize(); 
System.out.println(dimension.width + "/" + dimension.height); //3600X1093 

這種方法似乎是最精確的,因爲它實際上是返回兩個顯示器的分辨率。它返回一個值3600X1093

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
int width = gd.getDisplayMode().getWidth(); 
int height = gd.getDisplayMode().getHeight(); 
System.out.println(width + "/" + height); //1920X1080 

該方法似乎返回第一個監視器的值。我假設我可以通過更改默認屏幕設備來獲得第二臺顯示器,但是我無法知道用戶正在使用哪臺顯示器,因此這是一個爭論點。無論如何,它返回的值爲1920X1080。

var width = screen.width; 
var height = screen.height; 
console.log(width + "/" + height); //1680X1050 

看來JavaScript是最精確的(顯然...),因爲它知道在瀏覽器窗口的實際值。我知道我無法實現這個服務器端,但我包含了JavaScript,因爲我正在比較服務器端的值。

首先,最好的選擇似乎是工具包方法。這是否實際檢測到客戶端的分辨率,還是返回服務器當前運行的顯示器的值?如果它返回客戶端值,它是如何得到這些的?

服務器端客戶端解析檢測的主要原因是因爲我想構建一個自適應映像服務器。換句話說,檢測最大屏幕尺寸並返回合適的圖像。

任何人都可以解釋方法之間的差異和哪一個(或另一個可能)是最好的檢測客戶端的決議?

回答

3

java版本將只返回服務器的值,因爲它純粹是服務器端。擁有客戶端java的唯一方法是使用applet。

因此,我建議使用JavaScript解決方案。

+0

我剛剛得出這個結論。知道這樣做的任何不顯眼的方法,並仍然出現服務器端?我想避免不得不多次重新加載頁面以返回適當的圖片大小。 – ryandlf

+0

首先,因爲大多數擁有多個瀏覽器的人很可能只使用一臺顯示器,所以我認爲您不必擔心雙顯示器的問題。其次,爲了避免重新加載,也許你可以使用[jQuery](http://jquery.com/)。只需添加一個準備好文檔的監聽器,檢測您的屏幕大小並使用ajax獲取正確的分辨率圖像。 –

+0

圖像首先加載雖然正確?我想過使用javascript將分辨率數據添加到圖像字符串,然後在從服務器加載圖像時(通過捕獲所有圖像請求的特殊servlet)獲取該值。但有沒有一種方法來運行JavaScript並在實際圖像加載之前附加這些值? – ryandlf