Add a debug window, and a thread lister
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / debug / ThreadsPanel.java
1 package com.billkuker.rocketry.motorsim.debug;\r
2 \r
3 import java.lang.management.ManagementFactory;\r
4 import java.lang.management.ThreadInfo;\r
5 import java.lang.management.ThreadMXBean;\r
6 \r
7 import javax.swing.JTable;\r
8 import javax.swing.SwingUtilities;\r
9 import javax.swing.table.DefaultTableModel;\r
10 \r
11 public class ThreadsPanel extends JTable {\r
12         private static final long serialVersionUID = 1L;\r
13 \r
14         private DefaultTableModel tm = new DefaultTableModel();\r
15         static ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();\r
16 \r
17         public ThreadsPanel() {\r
18                 tm.addColumn("Name");\r
19                 tm.addColumn("ID");\r
20                 tm.addColumn("CPU");\r
21                 setModel(tm);\r
22 \r
23                 new Thread() {\r
24                         {\r
25                                 setDaemon(true);\r
26                                 setName("Debug - Thread List");\r
27                         }\r
28                         @Override\r
29                         public void run() {\r
30                                 while (true) {\r
31                                         try {\r
32                                                 SwingUtilities.invokeLater(new Thread() {\r
33                                                         @Override\r
34                                                         public void run() {\r
35                                                                 try {\r
36                                                                         while (tm.getRowCount() > 0)\r
37                                                                                 tm.removeRow(0);\r
38 \r
39                                                                         long[] tids = tmbean.getAllThreadIds();\r
40                                                                         ThreadInfo[] tinfos = tmbean.getThreadInfo(\r
41                                                                                         tids, Integer.MAX_VALUE);\r
42                                                                         for (ThreadInfo ti : tinfos) {\r
43                                                                                 tm.addRow(new Object[] {\r
44                                                                                                 ti.getThreadName(),\r
45                                                                                                 ti.getThreadId(),\r
46                                                                                                 tmbean.getThreadCpuTime(ti\r
47                                                                                                                 .getThreadId()),\r
48                                                                                                                 });\r
49                                                                         }\r
50                                                                 } catch (Exception e) {\r
51                                                                         e.printStackTrace();\r
52                                                                 }\r
53 \r
54                                                         }\r
55                                                 });\r
56                                                 Thread.sleep(1000);\r
57                                         } catch (Exception e) {\r
58                                                 e.printStackTrace();\r
59                                         }\r
60                                 }\r
61                         }\r
62                 }.start();\r
63         }\r
64 \r
65 }\r