1
2
3
4
5
6
7
8
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 }