001 package org.shiftone.jrat.desktop;
002
003 import org.jdesktop.swingx.JXHyperlink;
004
005 import javax.swing.*;
006 import java.awt.event.ActionEvent;
007 import java.awt.event.ActionListener;
008 import java.util.TimerTask;
009
010 /**
011 * @author (jeff@shiftone.org) Jeff Drost
012 */
013 public class Memory extends JPanel {
014
015 private static final long MEG = 1024 * 1024;
016 private static final java.util.Timer timer = new java.util.Timer(true);
017
018 public static JButton createMemoryButton() {
019 JButton button = new JXHyperlink();
020 button.addActionListener(new GcAction());
021 timer.schedule(new TickerTask(button), 1000, 1000);
022 return button;
023 }
024
025 private static class GcAction implements ActionListener {
026
027 public void actionPerformed(ActionEvent actionEvent) {
028 System.gc();
029 }
030 }
031
032 private static class TickerTask extends TimerTask {
033
034 private final JButton button;
035
036 public TickerTask(JButton button) {
037 this.button = button;
038 }
039
040 public void run() {
041
042 Runtime runtime = Runtime.getRuntime();
043
044 final StringBuffer sb = new StringBuffer();
045
046 long total = runtime.totalMemory();
047 long max = runtime.maxMemory();
048 long free = runtime.freeMemory();
049
050 sb.append(toMeg(total - free));
051 sb.append(" of ");
052 sb.append(toMeg(max));
053
054
055 SwingUtilities.invokeLater(new Runnable() {
056 public void run() {
057 button.setText(sb.toString());
058 }
059 });
060 }
061 }
062
063 private static String toMeg(long bytes) {
064 return (int) ((double) bytes / (double) MEG) + "M";
065 }
066 }