Ошибка «no sigar-x86-winnt.dll в java.library.path» при использовании Hyperic SIGAR на многоязычной ОС - PullRequest
5 голосов
/ 12 января 2012

Я использую библиотеку Hyperic SIGAR в качестве сторонней библиотеки в моей программе установки. Моя программа установки распаковывает все третьи файлы lib в папку% TEMP% \\ user.

В английской ОС все отлично работает, но когда я попытался запустить программу установки на испанском ОС, Я столкнулся со следующей ошибкой:

библиотека java включает в себя sigar.jar:

java.class.path = C: \ DOCUME ~ 1 \ Испанские буквы \ CONFIG ~ 1 \ Temp \ e4j58.tmp_dir \ user \ sigar.jar

Моя программа установки поддерживает WinXP, ОС WIN7.

Ошибка:

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

Кто-то уже сталкивался с подобной ошибкой и может посоветовать? Благодарю.

Ответы [ 4 ]

2 голосов
/ 31 марта 2015

Вы также можете программно добавить в java.path.library во время выполнения.

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

Очень хорошее объяснение находится по адресу: http://fahdshariff.blogspot.jp/2011/08/changing-java-library-path-at-runtime.html

2 голосов
/ 16 марта 2012

Вы должны установить Системное свойство (java.library.path)

ex) java ... -Djava.library.path=../lib/sigar/lib ...

java.library.path - это папка, содержащая sigar-x86-winnt.dll

https://forums.oracle.com/forums/thread.jspa?threadID=1299532

1 голос
/ 11 февраля 2014

, как обсуждалось в документации, SIGAR использует JNI внизу.Вы должны включить соответствующий JNI-файл в путь (файл обычно отображается в трассировке стека).Если вы используете maven для сборки проекта, вам нужно отредактировать pom.xml, чтобы добавить этот файл в путь (увы, вы не можете указать артефакт и предположить, что он будет в пути)

 <!-- add sigar dll to java path -->
                <configuration>
                    <forkMode>once</forkMode>
                    <workingDirectory>target</workingDirectory>
                    <argLine>-Djava.library.path=${basedir}/lib</argLine>
                </configuration>
1 голос
/ 12 июля 2012

sigar-x86-winnt.dll положить в текущий каталог пользователя, он будет работать

...