Add a debug window, and a thread lister
authorBill Kuker <bkuker@billkuker.com>
Thu, 14 Apr 2011 12:46:24 +0000 (12:46 +0000)
committerBill Kuker <bkuker@billkuker.com>
Thu, 14 Apr 2011 12:46:24 +0000 (12:46 +0000)
gui/com/billkuker/rocketry/motorsim/debug/DebugFrame.java [new file with mode: 0644]
gui/com/billkuker/rocketry/motorsim/debug/ThreadsPanel.java [new file with mode: 0644]
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorWorkbench.java

diff --git a/gui/com/billkuker/rocketry/motorsim/debug/DebugFrame.java b/gui/com/billkuker/rocketry/motorsim/debug/DebugFrame.java
new file mode 100644 (file)
index 0000000..025f621
--- /dev/null
@@ -0,0 +1,18 @@
+package com.billkuker.rocketry.motorsim.debug;\r
+\r
+import javax.swing.JFrame;\r
+import javax.swing.JScrollPane;\r
+import javax.swing.JTabbedPane;\r
+\r
+public class DebugFrame extends JFrame {\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       public DebugFrame(){\r
+               setSize(800,600);\r
+               setTitle("MotorSim - Debug");\r
+               JTabbedPane tabs = new JTabbedPane();\r
+               this.setContentPane(tabs);\r
+               tabs.add("Threads", new JScrollPane(new ThreadsPanel()));\r
+               this.setVisible(true);\r
+       }\r
+}\r
diff --git a/gui/com/billkuker/rocketry/motorsim/debug/ThreadsPanel.java b/gui/com/billkuker/rocketry/motorsim/debug/ThreadsPanel.java
new file mode 100644 (file)
index 0000000..81818c5
--- /dev/null
@@ -0,0 +1,65 @@
+package com.billkuker.rocketry.motorsim.debug;\r
+\r
+import java.lang.management.ManagementFactory;\r
+import java.lang.management.ThreadInfo;\r
+import java.lang.management.ThreadMXBean;\r
+\r
+import javax.swing.JTable;\r
+import javax.swing.SwingUtilities;\r
+import javax.swing.table.DefaultTableModel;\r
+\r
+public class ThreadsPanel extends JTable {\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       private DefaultTableModel tm = new DefaultTableModel();\r
+       static ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();\r
+\r
+       public ThreadsPanel() {\r
+               tm.addColumn("Name");\r
+               tm.addColumn("ID");\r
+               tm.addColumn("CPU");\r
+               setModel(tm);\r
+\r
+               new Thread() {\r
+                       {\r
+                               setDaemon(true);\r
+                               setName("Debug - Thread List");\r
+                       }\r
+                       @Override\r
+                       public void run() {\r
+                               while (true) {\r
+                                       try {\r
+                                               SwingUtilities.invokeLater(new Thread() {\r
+                                                       @Override\r
+                                                       public void run() {\r
+                                                               try {\r
+                                                                       while (tm.getRowCount() > 0)\r
+                                                                               tm.removeRow(0);\r
+\r
+                                                                       long[] tids = tmbean.getAllThreadIds();\r
+                                                                       ThreadInfo[] tinfos = tmbean.getThreadInfo(\r
+                                                                                       tids, Integer.MAX_VALUE);\r
+                                                                       for (ThreadInfo ti : tinfos) {\r
+                                                                               tm.addRow(new Object[] {\r
+                                                                                               ti.getThreadName(),\r
+                                                                                               ti.getThreadId(),\r
+                                                                                               tmbean.getThreadCpuTime(ti\r
+                                                                                                               .getThreadId()),\r
+                                                                                                               });\r
+                                                                       }\r
+                                                               } catch (Exception e) {\r
+                                                                       e.printStackTrace();\r
+                                                               }\r
+\r
+                                                       }\r
+                                               });\r
+                                               Thread.sleep(1000);\r
+                                       } catch (Exception e) {\r
+                                               e.printStackTrace();\r
+                                       }\r
+                               }\r
+                       }\r
+               }.start();\r
+       }\r
+\r
+}\r
index 79e979aba2426c3da5f8e441f5b57e5c6185fa8e..a22583d9a0cda3e6a665f19fc11c1b3c82bf2f1c 100644 (file)
@@ -17,6 +17,7 @@ import javax.swing.JRadioButtonMenuItem;
 import javax.swing.JSeparator;\r
 \r
 import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
+import com.billkuker.rocketry.motorsim.debug.DebugFrame;\r
 import com.billkuker.rocketry.motorsim.fuel.FuelsEditor;\r
 import com.billkuker.rocketry.motorsim.visual.RememberJFrame;\r
 \r
@@ -229,6 +230,17 @@ public class MotorWorkbench extends RememberJFrame {
                                                                });\r
                                                        }\r
                                                });\r
+                                               add(new JMenuItem("Debug") {\r
+                                                       private static final long serialVersionUID = 1L;\r
+                                                       {\r
+                                                               addActionListener(new ActionListener() {\r
+                                                                       @Override\r
+                                                                       public void actionPerformed(ActionEvent e) {\r
+                                                                               new DebugFrame();\r
+                                                                       }\r
+                                                               });\r
+                                                       }\r
+                                               });\r
                                        }\r
                                });\r
                        }\r