Obtener la temperatura del ordenador en Java
Resuelto
Valentin97
Mensajes publicados
14
Estado
Miembro
-
scriptiz Mensajes publicados 1494 Estado Miembro -
scriptiz Mensajes publicados 1494 Estado Miembro -
Hola,
Después de realizar varias búsquedas en Google, no he logrado encontrar la respuesta a mi pregunta: cómo recuperar la temperatura del ordenador a través de los sensores. Las respuestas que Google me ofreció estaban sobre todo centradas en C / C++ (solo conozco lo básico de C).
Gracias por su ayuda.
PD: No sé si podré responder de inmediato a sus respuestas (si proponen una solución en Java) porque no sé si mi ordenador tiene todos los sensores activados, ya que cuando escribo en un terminal:
Gracias de antemano.
Configuración: Linux (Ubuntu 11.04) / Firefox 12.0
Después de realizar varias búsquedas en Google, no he logrado encontrar la respuesta a mi pregunta: cómo recuperar la temperatura del ordenador a través de los sensores. Las respuestas que Google me ofreció estaban sobre todo centradas en C / C++ (solo conozco lo básico de C).
Gracias por su ayuda.
PD: No sé si podré responder de inmediato a sus respuestas (si proponen una solución en Java) porque no sé si mi ordenador tiene todos los sensores activados, ya que cuando escribo en un terminal:
sensorssiempre me muestra la misma temperatura: 21.8° Celsius. Si mis sensores no funcionan, podré darle una respuesta más adelante cuando tenga un nuevo PC.
Gracias de antemano.
Configuración: Linux (Ubuntu 11.04) / Firefox 12.0
3 respuestas
Puedes llamar a DLL (ya sea las API win32 o tus propias DLL creadas en C++) con JNI.
De lo contrario, hay otras bibliotecas para hacer esto como JNA de las que hablan aquí:
https://www.developpez.net/forums/d600497/java/general-java/api-standards-tierces/java-api-windows/
Pero no creo que Java permita acceder a esto a través de su biblioteca estándar.
“El método más exitoso de programación es comenzar un programa de la manera más simple posible, probarlo y luego añadir al programa hasta que realice el trabajo requerido.” -- PDP8 handbook, Pg 9-64
De lo contrario, hay otras bibliotecas para hacer esto como JNA de las que hablan aquí:
https://www.developpez.net/forums/d600497/java/general-java/api-standards-tierces/java-api-windows/
Pero no creo que Java permita acceder a esto a través de su biblioteca estándar.
“El método más exitoso de programación es comenzar un programa de la manera más simple posible, probarlo y luego añadir al programa hasta que realice el trabajo requerido.” -- PDP8 handbook, Pg 9-64
En ese caso, puede llamar fácilmente al comando sensors desde su programa Java y extraer el resultado que le interese (con un split o una expresión regular).
// El comando para recuperar las temperaturas String cmd = "sensors"; try { // Lanzamos el comando sensors Process child = Runtime.getRuntime().exec(cmd); // Recuperamos la salida del proceso InputStream lsOut = child.getInputStream(); InputStreamReader r = new InputStreamReader(lsOut); BufferedReader in = new BufferedReader(r); // Mostramos la salida del proceso String line; while ((line = in.readLine()) != null) { System.out.println(line); } } catch (Exception e) { // En caso de error System.out.println("Fallo en el comando: " + cmd); }Aprovecho para mostrar también la lectura del flujo de error, puede ser útil.
// El comando para recuperar las temperaturas String cmd = "sensors"; try { // Iniciamos el comando sensors Process child = Runtime.getRuntime().exec(cmd); // Recuperamos la salida estándar del proceso Scanner out = new Scanner(child.getInputStream()); // Recuperamos la salida de error del proceso Scanner err = new Scanner(child.getErrorStream()); // Mostramos las salidas del proceso while (out.hasNextLine()) System.out.println(out); while (err.hasNextLine()) System.err.println(err); // Liberamos el proceso out.close(); err.close(); child.destroy(); } catch (Exception e) { // En caso de error System.err.println("Fallo del comando: " + cmd); e.printStackTrace(); }