2012-01-12 6 views
5

Sto utilizzando la libreria a Hyperic SIGAR come lib di terze parti nel mio programma di installazione. Il mio programma di installazione decomprime tutti i terzi file lib nella cartella% TEMP% \\ utente.errore "no sigar-x86-winnt.dll in java.library.path" quando si utilizza Hyperic SIGAR su OS con più lingue

su tutto ciò di Inglese OS funziona alla grande, ma quando ho provato a eseguire il mio programma di installazione su Os spagnoli, ho incontrato il seguente errore:

la libreria Java include la sigar.jar:

java.class.path = C: \ DOCUME ~ 1 \ spagnoli lettere \ CONFIG ~ 1 \ Temp \ e4j58.tmp_dir \ utente \ sigar.jar

Il mio programma di installazione supporta WinXP, Win7 OS.

L'errore è:

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)' 

è qualcuno già ha rilevato un errore simile e può consigliare? Grazie.

+0

provare questo esempio per caricare il file [1]: http://stackoverflow.com/questions/4691095/java-loading-dlls -by-a-relativo-path-and-hide-them-inside-a-jar – Kris

risposta

1

sigar-x86-winnt.dll messo nella corrente user directory, funzionerà

+0

Potresti dire dove posso trovare sigar-x86-winnt.dll? – Jet

+0

@ Jet - Hai provato a cercare su Google? –

+0

@StephenC ... sì, l'ho capito in qualche modo – Jet

1

come discusso nei documenti, SIGAR utilizza JNI sotto. È necessario includere il file JNI appropriato nel percorso (il file viene in genere visualizzato nella traccia dello stack). Se si utilizza Maven per costruire il progetto, è necessario modificare pom.xml per aggiungere questo file al percorso (ahimè, non puoi specificare artefatto e assumere che sta per essere in cammino)

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

Si potrebbe aggiungere anche a java.path.library al runtime a livello di programmazione.

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 buona spiegazione si trova in: http://fahdshariff.blogspot.jp/2011/08/changing-java-library-path-at-runtime.html