6

Attach APIを使用して、自分のマシンで実行されているすべてのVMのリストを取得しようとしています。

これは私が使用しているコードです:

import java.lang.reflect.Field;
import java.util.List;
import com.sun.tools.attach.*;

public class JVMListManager 
{
    static String pathToAdd = "C:/Program Files/Java/jdk1.7.0_03/jre/bin/attach.dll";
    public static void setLibraryPath(String path) throws Exception {
        System.setProperty( "java.library.path", pathToAdd );

        Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
        fieldSysPath.setAccessible(true);
        fieldSysPath.set(null, null);
    }

    private void listActiveVM()
    {
        List<VirtualMachineDescriptor> vm = VirtualMachine.list();
        int i= 1;
        for(VirtualMachineDescriptor vmD : vm)
        {
            System.out.println(i + ". " + vmD.displayName());
            i++;
        }
    }

    public static void main(String[] args) throws Exception
    {
        setLibraryPath(pathToAdd);

        JVMListManager jvmListManager = new JVMListManager();
        jvmListManager.listActiveVM();
    }
}

エラー:

java.util.ServiceConfigurationError:com.sun.tools.attach.spi.AttachProvider:プロバイダーsun.tools.attach.WindowsAttachProviderをインスタンス化できませんでした:java.lang.UnsatisfiedLinkError:java.library.pathにアタッチがありません

これを修正するために使用できる方法を教えてください。

System.load(pathToAdd);も使用してみました。また、私はこのブログ投稿を参照しましたが、機能しません。:'(

4

1 に答える 1

6

必要がある:

set PATH=%PATH%;C:/Program Files/Java/jdk1.7.0_03/jre/bin/ (Windows の場合)

export LD_LIBRARY_PATH=path/to/your/library/dir/ (Linux または OSX の場合)

jvm を開始する前に、ネイティブ ライブラリのパスに準拠します。

私はそれがうまくいっているとは思わないSystem.setProperty( "java.library.path", pathToAdd );。これがおそらく問題の原因です。

于 2012-12-25T02:24:27.200 に答える