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

Résolu
Valentin97 Messages postés 14 Statut Membre -  
scriptiz Messages postés 1494 Statut Membre -
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. scriptiz Messages postés 1494 Statut Membre 425
     
    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
    4
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Dans la mesure où il travaille sur Ubuntu, je ne vois pas trop ce qu'il ferait de Win32 et des DLL...
      0
    2. scriptiz Messages postés 1494 Statut Membre 425
       
      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);
      }
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      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();
      }
      0