2012-01-12 12 views
5

Estoy usando la biblioteca a Hyperic SIGAR como lib de terceros en mi programa de instalación. Mi programa de instalación desempaqueta todos los terceros archivos lib a la carpeta% TEMP% \\ user."no sigar-x86-winnt.dll en java.library.path" error al utilizar Hyperic SIGAR en varios idiomas OS

En todo lo de Inglés OS funciona muy bien, pero cuando traté de ejecutar mi programa de instalación sobre el Os españoles, que he encontrado el siguiente error:

la biblioteca de Java incluye la sigar.jar:

java.class.path = C: \ DOCUME ~ 1 \ españolas Cartas \ CONFIG ~ 1 \ temp \ e4j58.tmp_dir \ usuario \ sigar.jar

Mi programa de instalación es compatible con WinXP, Win7 OS.

El error es:

no sigar-x86-winnt.dll in java.library.path 
org.hyperic.sigar.SigarException: no sigar-x86-winnt.dll in java.library.path 
at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172) 
at org.hyperic.sigar.Sigar.<clinit>(Sigar.java:100) 
at I4jScript_Internal_1.eval(I4jScript_Internal_1.java:23) 
at I4jScript_Internal_1.evaluate(I4jScript_Internal_1.java:79) 
at com.install4j.runtime.installer.helper.Script.evaluate(Unknown Source) 
at com.install4j.runtime.installer.ContextImpl.runScript(Unknown Source) 
at com.install4j.runtime.installer.ContextImpl.runScript(Unknown Source) 
at com.install4j.runtime.beans.actions.control.RunScriptAction.execute(Unknown Source) 
at com.install4j.runtime.beans.actions.SystemInstallOrUninstallAction.install(Unknown Source) 
at com.install4j.runtime.installer.InstallerContextImpl.performActionInt(Unknown Source) 
at com.install4j.runtime.installer.ContextImpl.performAction(Unknown Source) 
at com.install4j.runtime.installer.controller.Controller.executeActions(Unknown Source) 
at com.install4j.runtime.installer.controller.Controller.handleCommand(Unknown Source) 
at com.install4j.runtime.installer.controller.Controller.handleStartup(Unknown Source) 
at com.install4j.runtime.installer.controller.Controller.start(Unknown Source) 
at com.install4j.runtime.installer.Installer.main(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at com.exe4j.runtime.LauncherEngine.launch(Unknown Source) 
at com.exe4j.runtime.WinLauncher.main(Unknown Source) 
at com.install4j.runtime.launcher.WinLauncher.main(Unknown Source)' 

es alguien que ya encontró un error similar y puede aconsejar? Gracias.

+0

probar este ejemplo para cargar el archivo [1]: http://stackoverflow.com/questions/4691095/java-loading-dlls -by-a-relative-path-and-hide-them-inside-a-jar – Kris

Respuesta

1

sigar-x86-winnt.dll puso en el actual directorio de usuario, funcionará

+0

¿Podría decirme por favor dónde puedo obtener sigar-x86-winnt.dll? – Jet

+0

@Jet - ¿Has intentado buscar en Google? –

+0

@StephenC ... sí, lo tengo de alguna manera – Jet

1

como se discutió en los documentos, SIGAR usa JNI debajo. Debe incluir el archivo JNI apropiado en la ruta (el archivo generalmente se muestra en el seguimiento de la pila). Si está utilizando Maven para construir el proyecto, habrá que editar pom.xml añadir este archivo a la ruta (por desgracia, no puedes especificar artefacto y asumir que va a estar en el path)

<!-- add sigar dll to java path --> 
       <configuration> 
        <forkMode>once</forkMode> 
        <workingDirectory>target</workingDirectory> 
        <argLine>-Djava.library.path=${basedir}/lib</argLine> 
       </configuration> 
1

Usted podría también agregue a java.path.library en el tiempo de ejecución programáticamente.

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

    //set sys_paths to null 
    final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); 
    sysPathsField.setAccessible(true); 
    sysPathsField.set(null, null); 

Una muy buena explicación se encuentra en: http://fahdshariff.blogspot.jp/2011/08/changing-java-library-path-at-runtime.html

Cuestiones relacionadas