2011-04-06 11 views
14

Al utilizar la API com.sun.tools.attach en mi máquina de Windows, me sale el siguiente error al hacer una llamada aJava API Adjuntar: cambiar dinámicamente java.library.path

VirtualMachine.list() 

java. lang.UnsatisfiedLinkError: no se adjunta en java.library.path

La razón es la falta de attach.dll. El archivo attach.dll se encuentra en $JRE/bin/. Al iniciar mi programa Java con -Djava.library.path=[Directory to the attach.dll] todo funciona sin salida de error.

Ahora, no quiero agregar todos los programas Java inicie este feo parámetro JVM. Por lo tanto, mis preguntas son:

  1. Está mi máquina no configurados derecho y el $JRE/bin/ deben estar en la ruta de la biblioteca de todos modos?

  2. En caso negativo, ¿cómo puedo agregar la ruta de forma dinámica? System.setProperties("java.library.path",StringOfThePathToTheAttach.dll); no funciona. La ruta de la biblioteca se cambia, pero el error aparece de todos modos. ¿Tiene algo que ver con el inicio de SecurityManager o JVM?

+0

Después de cambiar la ruta de la biblioteca, se está utilizando un nuevo cargador de clases? –

+0

@ joseph-ottinger: no, creo que debería? –

Respuesta

5

Su System.setProperty("java.library.path", StringOfThePathToTheAttach.dll); debería funcionar. Supongo que lo llamas demasiado tarde. En otras palabras, hay un intento de acceder a la DLL antes de establecer la propiedad.

¿Se puede generar el valor actual para java.library.path después de establecer la propiedad en el código y nuevamente antes de la llamada al método ofensivo?

es decir, si ve el mensaje "Antes de llamar a attach.dll" antes de ver "Después de establecer la propiedad", sabrá dónde está su problema.

Editar:

Una mejor manera de apuntar a bibliotecas nativas es utilizar System.load(StringOfThePathToTheAttach.dll) - de nuevo, antes de la línea de código.

+0

@ Teddy-yueh No estoy seguro, si mi tarea es cargar el archivo dll. Después de todo, en mi máquina Ubuntu, la ruta de acceso de la biblioteca attach.so ya está vinculada. Creo que mi máquina de Windows simplemente se configuró mal. –

5
System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + FOLDER_THAT_CONTAINS_ATTACH_DLL); 
+5

Esa es una solución realmente horrible si no se desplaza hacia la derecha;) – JustinKSU

Cuestiones relacionadas