Récupérer température de l'ordinateur en Java

Résolu
Bonjour,

Après avoir fait plusieurs recherche sur Google, je n'ai pas réussi à trouver la réponse à ma question : récupérer la température de l'ordinateur par les sensors. Les réponses que Google ma apportés était surtout centré sur le C / C++ (je connais juste les base de C).
Merci de bien vouloir m'aider.

PS : Je ne sait pas si je vais pouvoir vous répondre tout de suite à vos réponse (si elle propose une solution en Java) car je ne sait pas si mon ordi à tous c'est sensors activé car quand je tape dans un terminal :
sensors
Il m'affiche toujours la même température : 21.8° Celsius.
Si mes sensors ne marche plus, je vais pourvoir vous donner une réponse dans quelque temps lorsque j'aurais un nouveau PC.

Merci d'avance.

3 réponses

  1. Tu peux appeler des DLL (soit les api win32, soit tes propres DLL créées en C++) avec JNI.

    Sinon il y a d'autres librairies pour faire ça comme JNA dont ils parlent ici :
    https://www.developpez.net/forums/d600497/java/general-java/api-standards-tierces/java-api-windows/

    Mais je ne pense pas que Java permette d'y accéder via sa librairie standard.
    "The most successful method of programming is to begin a program as simply as possible, test it, and then add to the program until it performs the required job." -- PDP8 handbook, Pg 9-64
    1. Modérateur
      Dans la mesure où il travaille sur Ubuntu, je ne vois pas trop ce qu'il ferait de Win32 et des DLL...
    2. Je n'avais pas vu qu'il était sur Ubuntu.

      Dans ce cas là il peut facilement appelé la commande sensors à partir de son programme Java et extraire le résultat qui l'intéresse (avec un split ou une expression régulière).

      // La commande pour récupérer les températures
      String cmd = "sensors";
      
      try {
      	// On lance la commande sensors
      	Process child = Runtime.getRuntime().exec(cmd);
      
      	// On récupère la sortie du process
      	InputStream lsOut = child.getInputStream();
      	InputStreamReader r = new InputStreamReader(lsOut);
      	BufferedReader in = new BufferedReader(r);
      
      	// On affiche la sortie du processus
      	String line;
      	while ((line = in.readLine()) != null) {
      		System.out.println(line);
      	}
      } 
      catch (Exception e) 
      { 
      	// En cas d'erreur
      	System.out.println("Echec de la commande : " + cmd);
      }
    3. Modérateur
      Remarque : on peut simplifier la partie récupération des données en utilisant la classe Scanner.
      J'en profite, pour également afficher la lecture du flux d'erreur, ça peut servir.

      // La commande pour récupérer les températures
      String cmd = "sensors";
      
      try
      {
          // On lance la commande sensors
          Process child = Runtime.getRuntime().exec(cmd);
      
          // On récupère la sortie standard du process
          Scanner out = new Scanner(child.getInputStream());
      
          // On récupère la sortie d'erreur du process
          Scanner err = new Scanner(child.getErrorStream());
      
          // On affiche les sorties du processus
          while (out.hasNextLine())
              System.out.println(out);
          while (err.hasNextLine())
              System.err.println(err);
      
          // On libère le processus
          out.close();
          err.close();
          child.destroy();
      }
      catch (Exception e)
      {
          // En cas d'erreur
          System.err.println("Echec de la commande : " + cmd);
          e.printStackTrace();
      }