import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import java.awt.*; import java.text.*; public class MeterFrame extends JInternalFrame { JProgressBar progressBarMem = new JProgressBar(0,100); //JProgressBar progressBar1 = new JProgressBar(0,1); //JProgressBar progressBar2 = new JProgressBar(0,1); //JLabel labelBar1 = new JLabel("Algorithm progress:"); //JLabel labelBar2 = new JLabel("Step progress:"); JTextField tf1 = new JTextField("Memoria de objetos asignada: "); JTextField tf2 = new JTextField("Memoria de objetos no usada: "); JTextField tf3 = new JTextField("Memoria de objetos m�xima: "); JPanel barsPanel; Thread meterThread; Object stopthrSem = new Object(); boolean stopthr = false; JInternalFrame self = this; public MeterFrame ( ) { super("Medidor de recursos",false,true,true,true); setTitle ( "Medidor de recursos" ); setSize(400,150); setVisible(true); tf1.setEditable(false); tf2.setEditable(false); tf3.setEditable(false); setDefaultCloseOperation ( JInternalFrame.DO_NOTHING_ON_CLOSE ); //se encarga el listener a continuaci�n addInternalFrameListener ( new InternalFrameAdapter() { public void internalFrameClosing ( InternalFrameEvent e ) { setVisible(false); stopMeterThread(); //dispose(); } }); barsPanel = new JPanel(); barsPanel.setLayout ( new GridLayout ( 5 , 1 ) ); barsPanel.add ( new JLabel ( "Uso de memoria:" ) ); barsPanel.add ( progressBarMem ); barsPanel.add(tf1); barsPanel.add(tf2); barsPanel.add(tf3); progressBarMem.setStringPainted(true); // progressBar1.setStringPainted(true); // progressBar2.setStringPainted(true); getContentPane().add ( barsPanel ); updateMemProgressBar(); meterThread = new Thread() { public void run() { for (;;) { try { sleep(200); } catch ( InterruptedException ie ) { ie.printStackTrace(); } updateMemProgressBar(); synchronized ( stopthrSem ) { if ( stopthr ) { self.dispose(); return; } } } } }; meterThread.start(); } public void stopMeterThread() { synchronized ( stopthrSem ) { stopthr = true; } } public String humanReadableSize ( long size ) { String unit=""; int divisor = 1; if ( size < 1024 ) { divisor = 1; unit = "B"; } if ( size < 1024*1024 ) { divisor = 1024; unit = "KB"; } if ( size < (1024*1024*1024) ) { divisor = 1024*1024; unit = "MB"; } double amount = ((double)size)/((double)divisor); return (new DecimalFormat("#.###").format(amount)) + " " + unit; } public void updateMemProgressBar ( ) { double freeMemory = (double) Runtime.getRuntime().freeMemory(); double totalMemory = (double) Runtime.getRuntime().totalMemory(); double maxMemory = (double) Runtime.getRuntime().maxMemory(); double usedMemory = totalMemory - freeMemory; tf1.setText( "Memoria de objetos asignada: " + humanReadableSize((long)totalMemory) ); tf2.setText( "Memoria de objetos usada: " + humanReadableSize((long)usedMemory) ); tf3.setText( "Memoria de objetos m�xima: " + humanReadableSize((long)maxMemory) ); int percent = (int)( (double)(( usedMemory ) / maxMemory) * 100 ); progressBarMem.setValue(percent); progressBarMem.setString(percent + "%"); if ( percent <= 60 ) progressBarMem.setForeground ( Color.green ); else if ( percent <= 85 ) progressBarMem.setForeground ( Color.yellow ); else progressBarMem.setForeground ( Color.red ); } }