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

Résolu/Fermé
Valentin97 Messages postés 14 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 25 octobre 2012 - 8 juin 2012 à 21:55
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 13 juin 2012 à 14:41
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.

A voir également:

3 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
Modifié par scriptiz le 9/06/2012 à 12:40
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
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
9 juin 2012 à 12:59
Dans la mesure où il travaille sur Ubuntu, je ne vois pas trop ce qu'il ferait de Win32 et des DLL...
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
10 juin 2012 à 14:04
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
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
Modifié par KX le 10/06/2012 à 14:43
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