--- /dev/null
+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
--- /dev/null
+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
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
});\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