package ij.plugin;
import java.io.*;
import ij.*;
import ij.text.*;
/**
* Displays thread information in a text window.
*
* This code is from the book _Java in a Nutshell_ by David Flanagan.
* Written by David Flanagan.
*/
public class ThreadLister implements PlugIn {
public void run(String arg) {
if (IJ.getApplet()!=null)
return;
CharArrayWriter caw = new CharArrayWriter();
PrintWriter pw = new PrintWriter(caw);
try {
listAllThreads(pw);
new TextWindow("Threads", caw.toString(), 420, 420);
} catch
(Exception e) {}
}
// Display info about a thread.
private static void print_thread_info(PrintWriter out, Thread t,
String indent) {
if (t == null) return;
out.print(indent + "Thread: " + t.getName() +
" Priority: " + t.getPriority() +
(t.isDaemon()?" Daemon":"") +
(t.isAlive()?"":" Not Alive") + "\n");
}
// Display info about a thread group and its threads and groups
private static void list_group(PrintWriter out, ThreadGroup g,
String indent) {
if (g == null) return;
int num_threads = g.activeCount();
int num_groups = g.activeGroupCount();
Thread[] threads = new Thread[num_threads];
ThreadGroup[] groups = new ThreadGroup[num_groups];
g.enumerate(threads, false);
g.enumerate(groups, false);
out.println(indent + "Thread Group: " + g.getName() +
" Max Priority: " + g.getMaxPriority() +
(g.isDaemon()?" Daemon":"") + "\n");
for(int i = 0; i < num_threads; i++)
print_thread_info(out, threads[i], indent + " ");
for(int i = 0; i < num_groups; i++)
list_group(out, groups[i], indent + " ");
}
// Find the root thread group and list it recursively
public static void listAllThreads(PrintWriter out) {
ThreadGroup current_thread_group;
ThreadGroup root_thread_group;
ThreadGroup parent;
// Get the current thread group
current_thread_group = Thread.currentThread().getThreadGroup();
// Now go find the root thread group
root_thread_group = current_thread_group;
parent = root_thread_group.getParent();
while(parent != null) {
root_thread_group = parent;
parent = parent.getParent();
}
// And list it, recursively
list_group(out, root_thread_group, "");
}
}