如何检索Java上的图形卡信息?

时间:2013-08-22 11:26:43

标签: java c++ opengl directx java-3d

有没有办法使用Java API检索我的图形卡适配器的信息?

我知道DirectX可以很容易地做到这一点,但是,我只是想知道Java是否可以做到这一点......?

如下图所示..DirectX发现GPU适配器集成到我的硬件中,以及其支持的分辨率列表。

我的问题是,有没有一个API可以让Java做这种事情? 我真的很想知道Java是否能够获得有关视频卡的信息。

enter image description here

谢谢。

2 个答案:

答案 0 :(得分:10)

正如@Sergey K.在他的回答中所说,有几种方法可以做到这一点。其中一个是使用dxdiag工具(显然它只适用于Windows),特别是dxdiag /t变体,它将输出重定向到给定文件。然后,您可以处理该文件以获取所需信息:

public static void main(String[] args) {        
    try {

        String filePath = "./foo.txt";
        // Use "dxdiag /t" variant to redirect output to a given file
        ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c","dxdiag","/t",filePath);
        System.out.println("-- Executing dxdiag command --");
        Process p = pb.start();
        p.waitFor();

        BufferedReader br = new BufferedReader(new FileReader(filePath));
        String line;
        System.out.println(String.format("-- Printing %1$1s info --",filePath));
        while((line = br.readLine()) != null){
            if(line.trim().startsWith("Card name:") || line.trim().startsWith("Current Mode:")){
                System.out.println(line.trim());
            }
        }
    } catch (IOException | InterruptedException ex) {
        ex.printStackTrace();
    }

}

生成的文件如下所示:

enter image description here

输出将如下所示:

  

- 执行dxdiag命令 -
   - 打印./foo.txt信息 -
  卡名:英特尔(R)高清显卡系列
  当前模式:1366 x 768(32位)(60Hz)

答案 1 :(得分:3)

您可以通过多种方式在Java中执行此操作。但所有这些都最终使用DirectX / OpenGL / C ++ / WinAPI /无论作为后端。

您需要针对此API的Java绑定。或者您可以用C / C ++编写代码并通过JNI使用它。