天天看點

JDK的問題:用C啟動虛拟機跟java運作結果有差異

  • 代碼

  同僚問吾,分辨率取得不對。吾一看:

int ppi = java.awt.Toolkit.getDefaultToolkit().getScreenResolution();      
  • 系統設定如下:
  • 問題是這樣的:
JDK的問題:用C啟動虛拟機跟java運作結果有差異
  • 直接用JAVA運作,得到120。
  • 使用安裝版本的啟動器,結果是96。

  這樣看是參數不對?于是吾就分析了一下啟動器參數(參考吾其他博文),結果發現兩種分辨率下沒有任何不同。

  • 再看源碼:
JNIEXPORT jint JNICALL
Java_sun_awt_Win32GraphicsEnvironment_getXResolution(JNIEnv *env, jobject wge)
{
    TRY;
 
    HWND hWnd = ::GetDesktopWindow();
    HDC hDC = ::GetDC(hWnd);
    jint result = ::GetDeviceCaps(hDC, LOGPIXELSX);
    ::ReleaseDC(hWnd, hDC);
    return result;
 
    CATCH_BAD_ALLOC_RET(0);
}      

這個跟比例真是一點關系也沒有。

  • 解決辦法

跟同僚講:汝寫個本地接口擷取一下比例,然後自行換算。