2015-03-02 62 views
2

如何可靠地找出我的JavaFX程序是否在視網膜設備上運行以及使用了哪種像素縮放比例。調用類似如何查看我的程序是否在Retina屏幕上運行

System.out.println(Screen.getPrimary().getDpi()); 

剛剛在我的Mac上返回110。這只是實際物理數據的一半,所以Screen類提供的信息是無用的。

有沒有其他的方法來找出我在找什麼?

邁克爾

+0

你使用的是什麼java版本? – Inge 2015-03-03 05:18:42

+0

我正在使用JDK8u31 – mipa 2015-03-03 08:56:28

+0

啊,好吧,也許你會發現一些提示在這個[答案](http://stackoverflow.com/questions/26182460/javafx-8-hidpi-support) – Inge 2015-03-03 11:55:12

回答

2

我想我現在可以回答我自己的問題。官方似乎沒有任何方法可以找出屏幕的物理DPI。唯一的辦法似乎是在下面的例子中使用一些私人API,如:

import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 
import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 

public class PixelScaleTest extends Application { 

    public static double getPixelScale(Screen screen) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 
     Method m = Screen.class.getDeclaredMethod("getScale"); 
     m.setAccessible(true); 
     return ((Float) m.invoke(screen)).doubleValue(); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     try { 
      System.out.println("PixelScale: " + getPixelScale(Screen.getPrimary())); 
     } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException 
       | SecurityException e) { 
      e.printStackTrace(); 
     } 
     Platform.exit(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 

與像素比例因子,你可以計算你的身體的DPI。在標準屏幕上,這個因子應該是1.0,在Mac Retina上應該是2.0。

相關問題