2013-08-22 9 views
6

Gibt es eine Möglichkeit, Informationen meines Grafikkartenadapters mithilfe der Java-API abzurufen?Wie kann ich Grafikkarteninformationen auf Java abrufen?

Ich weiß, dass DirectX es leicht tun können, aber ich frage mich nur, wenn Java kann dies tun ...?

wie Bild unten .. DirectX findet heraus, GPU-Adapter an meine Hardware integriert, und eine Liste seiner Unterstützung Auflösungen.

Mein Problem ist, gibt es eine API, die Java diese Art der Sache tun würde? Ich frage mich wirklich, ob Java Informationen über die Videokarte erhalten kann.

enter image description here

Danke.

Antwort

8

Wie @Sergey K. sagte in seiner Antwort gibt es mehrere Möglichkeiten, dies zu tun. Einer davon verwendet dxdiag Werkzeug (offensichtlich wird es nur unter Windows) insbesondere dxdiag /t Variante, die die Ausgabe auf eine bestimmte Datei umleiten wird. Dann können Sie diese Datei verarbeiten erforderlichen Informationen zu erhalten:

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(); 
    } 

} 

generierte Datei wird wie folgt aussehen:

enter image description here

Und Ausgabe wie folgt aussehen:

- Executing dxdiag Befehl -
- ./foo.txt info Druck -
Kartename: Intel (R) HD-G raphics Familie
Aktueller Modus: 1366 x 768 (32 Bit) (60Hz)

3

Es gibt mehrere Möglichkeiten, wie Sie dies in Java tun können. Aber alle verwenden am Ende DirectX/OpenGL/C++/WinAPI/was auch immer als ihr Back-End.

Sie benötigen Java-Bindungen für jedes dieser API. Oder Sie können Ihren Code in C/C++ schreiben und über JNI verwenden.

Verwandte Themen