View Javadoc

1   /*
2    * @(#) MemoryFrame.java Nov 5, 2003
3    * 
4    * Copyright (c) 2003 Delft University of Technology Jaffalaan 5, 2628 BX Delft,
5    * the Netherlands All rights reserved.
6    * 
7    * This software is proprietary information of Delft University of Technology
8    * The code is published under the General Public License
9    */
10  
11  package nl.tudelft.simulation.dsol.gui.windows;
12  
13  import java.awt.BorderLayout;
14  import java.awt.event.ActionEvent;
15  import java.awt.event.ActionListener;
16  import java.text.NumberFormat;
17  import javax.swing.BorderFactory;
18  import javax.swing.JButton;
19  import javax.swing.JFrame;
20  import javax.swing.JPanel;
21  import javax.swing.JTextField;
22  import javax.swing.WindowConstants;
23  import nl.tudelft.simulation.dsol.gui.panels.TablePanel;
24  import nl.tudelft.simulation.logger.Logger;
25  
26  /***
27   * @author peter
28   */
29  public class MemoryFrame extends JFrame implements ActionListener
30  {
31  	/*** freeMem */
32  	private JTextField freeMemoryField = new JTextField();
33  
34  	/*** usedMem */
35  	private JTextField totalMemoryField = new JTextField();
36  
37  	/*** total Mem */
38  	private JTextField usedMemoryField = new JTextField();
39  
40  	/***
41  	 * constructs a new MemoryFrame
42  	 *  
43  	 */
44  	public MemoryFrame()
45  	{
46  		super("Memory information");
47  		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
48  		this.initialize();
49  		new Worker(this).start();
50  		this.pack();
51  		this.setResizable(false);
52  		this.setVisible(true);
53  	}
54  
55  	/***
56  	 * initializes
57  	 */
58  	private void initialize()
59  	{
60  		this.freeMemoryField.setEditable(false);
61  		this.usedMemoryField.setEditable(false);
62  		this.totalMemoryField.setEditable(false);
63  		JPanel panel = new JPanel(new BorderLayout());
64  		TablePanel buttonPanel = new TablePanel(1, 1);
65  		JButton button = new JButton("Clean garbage now !");
66  		button.addActionListener(this);
67  		buttonPanel.setCell(button, 0, 0);
68  		panel.add(buttonPanel, BorderLayout.SOUTH);
69  		TablePanel memoryPanel = new TablePanel(3, 2);
70  		memoryPanel.setBorder(BorderFactory.createTitledBorder("Memory"));
71  		JTextField freeLabel = new JTextField("Free memory (bytes)");
72  		freeLabel.setEditable(false);
73  		JTextField usedLabel = new JTextField("Used memory (bytes)");
74  		usedLabel.setEditable(false);
75  		JTextField totalLabel = new JTextField("Total memory (bytes)");
76  		totalLabel.setEditable(false);
77  		memoryPanel.setCell(freeLabel, 0, 0);
78  		memoryPanel.setCell(usedLabel, 1, 0);
79  		memoryPanel.setCell(totalLabel, 2, 0);
80  		memoryPanel.setCell(this.freeMemoryField, 0, 1);
81  		memoryPanel.setCell(this.usedMemoryField, 1, 1);
82  		memoryPanel.setCell(this.totalMemoryField, 2, 1);
83  		panel.add(memoryPanel, BorderLayout.CENTER);
84  		this.setContentPane(panel);
85  		this.validate();
86  	}
87  
88  	/***
89  	 * @see java.awt.event.ActionListener
90  	 *      #actionPerformed(java.awt.event.ActionEvent)
91  	 */
92  	public void actionPerformed(final ActionEvent event)
93  	{
94  		Runtime.getRuntime().gc();
95  		this.repaint();
96  	}
97  
98  	/***
99  	 * gets freeMemoryField
100 	 * 
101 	 * @return Returns the freeMemoryField.
102 	 */
103 	protected JTextField getFreeMemoryField()
104 	{
105 		return this.freeMemoryField;
106 	}
107 
108 	/***
109 	 * gets totalMemoryField
110 	 * 
111 	 * @return Returns the totalMemoryField.
112 	 */
113 	protected JTextField getTotalMemoryField()
114 	{
115 		return this.totalMemoryField;
116 	}
117 
118 	/***
119 	 * gets usedMemoryField
120 	 * 
121 	 * @return Returns the usedMemoryField.
122 	 */
123 	protected JTextField getUsedMemoryField()
124 	{
125 		return this.usedMemoryField;
126 	}
127 
128 	/***
129 	 * @author peter
130 	 */
131 	private class Worker extends Thread
132 	{
133 		/*** a formatter */
134 		private NumberFormat formatter = NumberFormat.getInstance();
135 
136 		/*** the memoryFrame */
137 		private MemoryFrame frame = null;
138 
139 		/***
140 		 * constructs a new SimulatorRunThread
141 		 * 
142 		 * @param frame the frame.
143 		 */
144 		public Worker(final MemoryFrame frame)
145 		{
146 			super();
147 			this.frame = frame;
148 			this.formatter.setMaximumFractionDigits(1);
149 		}
150 
151 		/***
152 		 * @see java.lang.Runnable#run()
153 		 */
154 		public void run()
155 		{
156 			try
157 			{
158 				while (true)
159 				{
160 					long free = Runtime.getRuntime().freeMemory();
161 					long total = Runtime.getRuntime().totalMemory();
162 					long used = total - free;
163 					this.frame
164 							.getFreeMemoryField()
165 							.setText(
166 									free
167 											+ "  ("
168 											+ this.formatter
169 													.format((free / (double) total) * 100)
170 											+ "%)");
171 					this.frame
172 							.getUsedMemoryField()
173 							.setText(
174 									used
175 											+ "  ("
176 											+ this.formatter
177 													.format((used / (double) total) * 100)
178 											+ "%)");
179 					this.frame.getTotalMemoryField().setText(
180 							total + "  (100.0%)");
181 					MemoryFrame.this.validate();
182 					MemoryFrame.this.repaint();
183 					Thread.sleep(3500);
184 				}
185 			} catch (Exception exception)
186 			{
187 				Logger.warning(this, "run", exception);
188 			}
189 		}
190 	}
191 }