/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.client.swing; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.text.DecimalFormat; import javax.swing.JProgressBar; /** */ public class MemoryStatusBar extends JProgressBar { private static final long serialVersionUID = 1L; private static final Dimension minSize = new Dimension(75, 10); private static final DecimalFormat format = new DecimalFormat("#,##0.#"); private static double largestMemoryUsed = -1; private static MemoryStatusBar msb = null; public static MemoryStatusBar getInstance() { if (msb == null) msb = new MemoryStatusBar(); return msb; } private MemoryStatusBar() { setMinimum(0); setStringPainted(true); new Thread() { @Override public void run() { while (true) { update(); try { Thread.sleep(1000); } catch (InterruptedException ie) { break; } } } }.start(); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent e) { System.gc(); update(); } }); } /* * (non-Javadoc) * * @see javax.swing.JComponent#getMinimumSize() */ @Override public Dimension getMinimumSize() { return minSize; } /* * (non-Javadoc) * * @see javax.swing.JComponent#getPreferredSize() */ @Override public Dimension getPreferredSize() { return getMinimumSize(); } public double getLargestMemoryUsed() { return largestMemoryUsed; } private void update() { double totalMegs = Runtime.getRuntime().totalMemory() / (1024 * 1024); double freeMegs = Runtime.getRuntime().freeMemory() / (1024 * 1024); if (totalMegs > largestMemoryUsed) largestMemoryUsed = totalMegs; setMaximum((int) totalMegs); setValue((int) (totalMegs - freeMegs)); setString(format.format(totalMegs - freeMegs) + "M/" + format.format(totalMegs) + "M"); setToolTipText("Used Memory: " + (totalMegs - freeMegs) + "M, Total Memory: " + totalMegs + "M"); } }