Foros del Web » Programación para mayores de 30 ;) » Java »

Actualizar una gráfica.

Estas en el tema de Actualizar una gráfica. en el foro de Java en Foros del Web. Buenas tardes. Estoy trabajando en un proyecto y he estado haciendo un programa de gestión del procesador. A partir del fichero "/proc/stat" puedo obtener unos ...
  #1 (permalink)  
Antiguo 02/03/2011, 11:57
 
Fecha de Ingreso: marzo-2011
Mensajes: 33
Antigüedad: 13 años, 8 meses
Puntos: 0
Actualizar una gráfica.

Buenas tardes. Estoy trabajando en un proyecto y he estado haciendo un programa de gestión del procesador. A partir del fichero "/proc/stat" puedo obtener unos datos para aplicar una fórmula y deducir de ahí el porcentaje de CPU utilizado en cada momento.

Ese dato lo utilizo para pintar una gráfica dentro de un panel conforme pasan los segundos, el problema que tengo es que cuando se pinta la gráfica y no queda "más panel" ya no pinta más. Mi idea es que la gráfica se actualice cuando llegue al final del panel o bien se vaya moviendo desde el principio hacia adelante.

Trabajo en "Ubuntu", si deseáis ver la gráfica tal como yo la intento hacer, solo debéis ir a: "Sistema->Administración->Monitor del Sistema". Ahí, en la pestaña "recursos" podéis ver 3 gráficas y como se actualizan aunque lleguen al final del panel. Ahora paso a poner mi gráfica para que veáis la diferencia y podáis aconsejarme. Por cierto, mi gráfica es totalmente manual y no muy buena, pero lo importante es aprender.

http://www.subirimagenes.com/imagen-grafica-6043562.html

Como podéis apreciar, la gráfica es distinta, ya que el tiempo está al revés y no va hacia delante la gráfica, sino que el primer instante queda al principio para siempre.

Este es mi código (Sólo para dibujar la gráfica): Suponed que todas las variables ya están creadas.

Código Java:
Ver original
  1. public void run() {
  2.             while (true) {
  3.                 jProgressBar1.setValue((int) h1.damePorcentaje());
  4.                 jLabel2.setText("" + (int) h1.damePorcentaje() + "%");
  5.                 Real=(int) (410 * (h1.damePorcentaje()/100));
  6.                 x1=Time/100;
  7.                 y1=410-Real;
  8.                 g.drawLine(x1, y1, x1, y1);
  9.                 Time=Time+Tiempo;
  10.                 jLabel30.setText("" + h1.dameRAM() + "%");
  11.                 jProgressBar2.setValue( h1.dameRAM());
  12.                 jLabel31.setText("" + h1.dameSwap() + "%");
  13.                 jProgressBar3.setValue( h1.dameSwap());
  14.                 try {
  15.                     this.sleep(500);
  16.                 } catch (InterruptedException ex) {
  17.                     Logger.getLogger(FraCPU.class.getName()).log(Level.SEVERE, null, ex);
  18.                 }
  19.                 jProgressBar1.setValue((int) h1.damePorcentaje());
  20.                 jLabel2.setText("" + (int) h1.damePorcentaje() + "%");
  21.                 Real=(int) (410 * (h1.damePorcentaje()/100));
  22.                 x2=Time/100;
  23.                 y2=410-Real;
  24.                 g.drawLine(x1, y1, x2, y2);
  25.                 Time=Time+Tiempo;
  26.  
  27.             }
  28.         }

Última edición por Slithice; 02/03/2011 a las 12:02
  #2 (permalink)  
Antiguo 02/03/2011, 12:36
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 9 meses
Puntos: 20
Respuesta: Actualizar una gráfica.

hola

lo que puedes hacer es trasladar tus graficas, no me acuerdo bien el codigo, pero busca en google traslacion en java 2D

saludos
  #3 (permalink)  
Antiguo 03/03/2011, 03:26
 
Fecha de Ingreso: marzo-2011
Mensajes: 33
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Actualizar una gráfica.

He estado mirando lo que me has dicho y la verdad que es más complejo de lo que yo creía, así que tardaré algo hasta volver a hablar de la gráfica. No obstante, hay algunas otras cosas de mi programa que me fallan, así que trataré de explicarlo. La duda que tengo está en mi "HILO", pero os dejo el código entero por si a alguien le interesa observar todo el programa y se lo ocurre algo para mi gráfica.

EDITO: No puedo poner mi frame, es demasiado largo incluso partiéndolo, así que mejor nos centramos en este problemilla absurdo que me deja un poco despistado.

Este es mi proyecto, no hago nada porque no es necesario.

Código Java:
Ver original
  1. package computerprou;
  2.  
  3.  
  4.  
  5. public class CPUProject{
  6.     int Time;
  7.  
  8.     public static void main(String[] args) {
  9.         // TODO code application logic here
  10.     }
  11.  
  12. }


Este es mi Frame:


[HIGHLIGHT="Java"]package computerprou;

import java.awt.Color;
import java.awt.Graphics;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;
import javax.swing.JTextField;




Y este es mi Hilo:

Código Java:
Ver original
  1. package computerprou;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileReader;
  7. import java.io.IOException;
  8. import java.util.logging.Level;
  9. import java.util.logging.Logger;
  10.  
  11. public class HiloCPU extends Thread {
  12.     String f = "/proc/stat";
  13.     String f2 = "/proc/meminfo";
  14.     String f3 = "/proc/uptime";
  15.     String Linea;
  16.     String[] num;
  17.     int Numero1;
  18.     int Numero2;
  19.     int Numero3;
  20.     int Numero4;
  21.     int Numero11;
  22.     int Numero21;
  23.     int Numero31;
  24.     int Numero41;
  25.     int Ram;
  26.     int RamUtilizada;
  27.     int RamLibre;
  28.     int RamTotal;
  29.     int Tiempo;
  30.     int CCT0;
  31.     int CCT1;
  32.     int UCT0;
  33.     int UCT1;
  34.     float Porcentaje;
  35.     int SwapLibre;
  36.     int SwapTotal;
  37.     int SwapUsada;
  38.     int Swap;
  39.     int Horas;
  40.     int Minutos;
  41.     int Segundos;
  42.     int Timm;
  43.     String Encendido;
  44.  
  45.     float damePorcentaje(){
  46.         return Porcentaje;
  47.     }
  48.     int dameSwap(){
  49.         File Fic3 = new File(f2);
  50.         FileReader FicRead3 = null;
  51.         try {
  52.             FicRead3 = new FileReader(Fic3);
  53.         } catch (Exception e) {
  54.             System.out.println(e);
  55.         }
  56.         BufferedReader BuffRead3 = new BufferedReader(FicRead3);
  57.         try {
  58.                 BuffRead3.readLine();
  59.                 BuffRead3.readLine();
  60.                 BuffRead3.readLine();
  61.                 BuffRead3.readLine();
  62.                 BuffRead3.readLine();
  63.                 BuffRead3.readLine();
  64.                 BuffRead3.readLine();
  65.                 BuffRead3.readLine();
  66.                 BuffRead3.readLine();
  67.                 BuffRead3.readLine();
  68.                 BuffRead3.readLine();
  69.                 BuffRead3.readLine();
  70.                 BuffRead3.readLine();
  71.                 Linea = BuffRead3.readLine();
  72.                 num = Linea.split("\\s+");
  73.                 SwapTotal = Integer.parseInt(num[1]);
  74.                 Linea = BuffRead3.readLine();
  75.                 num = Linea.split("\\s+");
  76.                 SwapLibre = Integer.parseInt(num[1]);
  77.                 SwapUsada=SwapTotal-SwapLibre;
  78.                 Swap = (SwapUsada*100)/SwapTotal;
  79.         } catch (IOException ex) {
  80.             Logger.getLogger(HiloCPU.class.getName()).log(Level.SEVERE, null, ex);
  81.         }
  82.         return Swap;
  83.     }
  84.  
  85.     String TiempoEncendido(){
  86.         File Fic3 = new File(f3);
  87.         FileReader FicRead3 = null;
  88.         try {
  89.             FicRead3 = new FileReader(Fic3);
  90.         } catch (Exception e) {
  91.             System.out.println(e);
  92.         }
  93.         BufferedReader BuffRead3 = new BufferedReader(FicRead3);
  94.         try {
  95.             Linea = BuffRead3.readLine();
  96.             num = Linea.split("\\s+");
  97.             Timm = Integer.parseInt(num[0]);
  98.             if (Timm>=3600){
  99.                Horas=Timm/60;
  100.             }
  101.             System.out.println(Horas);
  102.         } catch (Exception e) {
  103.             System.out.println(e);
  104.         }
  105.         return Encendido;
  106.     }
  107.  
  108.     int dameRAM(){
  109.         File Fic3 = new File(f2);
  110.         FileReader FicRead3 = null;
  111.         try {
  112.             FicRead3 = new FileReader(Fic3);
  113.         } catch (Exception e) {
  114.             System.out.println(e);
  115.         }
  116.         BufferedReader BuffRead3 = new BufferedReader(FicRead3);
  117.         try {
  118.                 Linea = BuffRead3.readLine();
  119.                 num = Linea.split("\\s+");
  120.                 RamTotal = Integer.parseInt(num[1]);
  121.                 Linea = BuffRead3.readLine();
  122.                 num = Linea.split("\\s+");
  123.                 RamLibre = Integer.parseInt(num[1]);
  124.                 RamUtilizada=RamTotal-RamLibre;
  125.                 Ram = (RamUtilizada*100)/RamTotal;
  126.         } catch (IOException ex) {
  127.             Logger.getLogger(HiloCPU.class.getName()).log(Level.SEVERE, null, ex);
  128.         }
  129.         return Ram;
  130.     }
  131.  
  132.     HiloCPU(int t){
  133.         Tiempo=t;
  134.     }
  135.     public void run(){
  136.         while(true){
  137.             FileReader FicRead2 = null;
  138.  
  139.             try {
  140.                 File Fic1 = new File(f);
  141.                 FileReader FicRead1 = new FileReader(Fic1);
  142.                 BufferedReader BuffRead1 = new BufferedReader(FicRead1);
  143.                 File Fic2 = new File(f);
  144.                 FicRead2=new FileReader(Fic2);
  145.                 BufferedReader BuffRead2 = new BufferedReader(FicRead2);
  146.                 try {
  147.                     Linea = BuffRead1.readLine();
  148.                     num = Linea.split(" ");
  149.                     Numero1 = Integer.parseInt(num[2]);
  150.                     Numero2 = Integer.parseInt(num[3]);
  151.                     Numero3 = Integer.parseInt(num[4]);
  152.                     Numero4 = Integer.parseInt(num[5]);
  153.                     CCT0 = Numero1 + Numero2 + Numero3;
  154.                     UCT0 = CCT0 + Numero4;
  155.                     Thread.sleep(Tiempo);
  156.                    
  157.                     Linea = BuffRead2.readLine();
  158.                     num = Linea.split(" ");
  159.                     Numero11 = Integer.parseInt(num[2]);
  160.                     Numero21 = Integer.parseInt(num[3]);
  161.                     Numero31 = Integer.parseInt(num[4]);
  162.                     Numero41 = Integer.parseInt(num[5]);
  163.                     CCT1 = Numero11 + Numero21 + Numero31;
  164.                     UCT1 = CCT1 + Numero41;
  165.                     Porcentaje = (((float) CCT1 - (float) CCT0) / ((float) UCT1 - (float) UCT0)) * 100f;
  166.                     TiempoEncendido();
  167.                     FicRead2.close();
  168.                     FicRead1.close();
  169.                 } catch (Exception e) {
  170.                     System.out.println(e);
  171.                 }
  172.                
  173.  
  174.             } catch (FileNotFoundException ex){
  175.                 Logger.getLogger(HiloCPU.class.getName()).log(Level.SEVERE, null,ex);
  176.             } finally {
  177.                 try {
  178.                     FicRead2.close();
  179.                 } catch (IOException ex) {
  180.                     Logger.getLogger(HiloCPU.class.getName()).log(Level.SEVERE, null, ex);
  181.                 }
  182.             }
  183.         }
  184.        
  185.     }
  186. }

El hilo es del que tengo dudas.

Cuando ejecuto el programa y le doy a empezar, ocurre una excepción en el método "String TiempoEncendido". Cuando capturo el tiempo que lleva encendido el ordenador me da una excepción, cosa que no tiene sentido. Esta excepción desaparece cuando comento la línea de código siguiente:

Código Java:
Ver original
  1. Timm = Integer.parseInt(num[0]);

La excepción es la siguiente: "java.lang.NumberFormatException: For input string: '1700.43'".

El número es el tiempo en segundos que lleva encendido el ordenador. He probado a poner Timm como "float" en lugar de "int", pero el problema persiste.

Última edición por Slithice; 03/03/2011 a las 03:32

Etiquetas: actualizar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:21.