以前にネタとしたAttach APIを使って、同様に調べることができる。
Attach API (アプリケーションのインスタンス数を制御するには-その4)
boolean existJWSApplication(final String path) {
return FinderUtil.findAll(VirtualMachine.list()
, new IPredicate(){
@Override
public boolean evaluate(VirtualMachineDescriptor input) {
String[] tokens = input.displayName().split("[?,\\s]");
for ( String token : tokens ) {
if ( token.equals(path) )
return true;
}
return false;
}
}).size() > 0;
}
:
:
if ( existJWSApplication("http://hoge/hogeApp/jws/hogehoge.jnlp") ) {
//起動済み
} else {
//起動していない
}
VirtualMachineDescriptor#displayName()で取得される文字列には、起動時のURLが他のオプションとして含まれるため、それを分離して検査対象のパスと比較しているだけである。
FinderUtil.findAllメソッドは冒頭のリンクでも紹介している述語論理を使用したファインダメソッド。非常に重宝している。
なお、当然だがVirtualMachineクラスおよびVirtualMachineDescriptorクラスを使用するには、tools.jarをパスに含めることが必要となる。(故にSunのJDK以外では使用できない)