import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Map; import java.util.LinkedHashMap; import javax.management.MBeanServerConnection; import javax.swing.JPanel; import javax.swing.SwingWorker; import com.sun.tools.jconsole.JConsolePlugin; import com.sun.tools.jconsole.JConsoleContext; import com.sun.tools.jconsole.JConsoleContext.ConnectionState; public class HeapUsagePlugin extends JConsolePlugin { private HeapUsageIndicator indicator; private Map tabs; public HeapUsagePlugin() { addContextPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent ev) { // 変更されたプロパティを取得 String prop = ev.getPropertyName(); if (prop == JConsoleContext.CONNECTION_STATE_PROPERTY) { // JavaVMと接続されたらMBeanServerConnectionを取得し // MemoryUsageIndicatorにセットする ConnectionState state = (ConnectionState)ev.getNewValue(); if (state == ConnectionState.CONNECTED && indicator != null) { MBeanServerConnection connection = getContext().getMBeanServerConnection(); indicator.setMBeanServerConnection(connection); } } } }); } @Override public synchronized Map getTabs() { if (tabs == null) { indicator = new HeapUsageIndicator(); indicator.setMBeanServerConnection( getContext().getMBeanServerConnection()); tabs = new LinkedHashMap(); tabs.put("Heap Usage", indicator); } return tabs; } @Override public SwingWorker newSwingWorker() { return indicator.newSwingWorker(); } }