注:在1.6JDK下测试通过,其他版本未测试。
在做项目时,要获得其他运行的JAVA进程的主类名称
例如jconsole这样
那它的这些信息是如何获得的呢?
如果已配置环境变量,则可直接用jps命令获得。或直接调用Jps.main(new String[]{-l});
但是这样是直接输出了,那该怎么获得呢。
参考以下代码
import java.util.Iterator;
import java.util.Set;
import sun.jvmstat.monitor.HostIdentifier;
import sun.jvmstat.monitor.MonitoredHost;
import sun.jvmstat.monitor.MonitoredVm;
import sun.jvmstat.monitor.MonitoredVmUtil;
import sun.jvmstat.monitor.VmIdentifier;
import sun.tools.jps.Arguments;
import sun.tools.jps.Jps;
public class JSPTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
Arguments arguments = new Arguments(new String[] {"-l"});
HostIdentifier hostidentifier = arguments.hostId();
MonitoredHost monitoredhost = MonitoredHost.getMonitoredHost(hostidentifier);
Set set = monitoredhost.activeVms();
Iterator iterator = set.iterator();
String s = null;
while (iterator.hasNext()) {
int i = ((Integer) iterator.next()).intValue();
s = (new StringBuilder()).append("//").append(i).append("?mode=r").toString();
VmIdentifier vmidentifier = new VmIdentifier(s);
MonitoredVm monitoredvm = monitoredhost.getMonitoredVm(vmidentifier, 0);
String s1 = MonitoredVmUtil.mainClass(monitoredvm, true);
System.out.println(s1);
}
}
}
这样就可以了。
代码中用到了tools.jar这个jar包,可以在JAVA_HOME的lib目录下找到他