Obtener la temperatura del ordenador en Java

Resuelto
Valentin97 Mensajes publicados 14 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:
sensors
siempre 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

scriptiz Mensajes publicados 1494 Estado Miembro 425
 
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
4
KX Mensajes publicados 19031 Estado Moderador 3 020
 
En la medida en que trabaja en Ubuntu, no veo muy bien qué haría con Win32 y las DLL...
0
scriptiz Mensajes publicados 1494 Estado Miembro 425
 
No había visto que estaba en Ubuntu.

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); }
0
KX Mensajes publicados 19031 Estado Moderador 3 020
 
Nota: se puede simplificar la parte de recuperación de datos utilizando la clase Scanner.
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(); }
0