(Может быть, это очевидная ошибка, которую я совершаю, но я не смог заставить ее работать через 6 часов.)
Я пытаюсь получить информацию о процессоре, используя sigar.jar в своем проекте eclipse (пока просто тестирую API sigar).
Он работает в затмении без проблем:
- что заставило его работать в eclipse, так это поместить dll в ту же папку, что и sigar.jar
- Я проверил, что добавление пути к dll в качестве «собственного свойства кода» в диалоговом окне конфигурации пути сборки не имеет никакого эффекта.
- Добавление аргументов vm в конфигурацию запуска также не дает никакого эффекта.
- Я протестировал размещение 2 поддельных путей в этих 2 местах, и пока у меня есть dll в той же папке, что и sigar.jar... он хорошо работает в eclipse.
Проблема в том, что я пытаюсь экспортировать исполняемый файл .jar для своего проекта. Я пробовал 2 вещи:
- Я изменил файл MANIFEST.MF с помощью Bundle-NativeCode: libs/sigar-amd64-winnt.dll (здесь я предполагаю, что путь указан относительно папки проекта) -> безуспешно:
main starting!! no sigar-amd64-winnt.dll in java.library.path
org.hyperic.sigar.SigarException: no sigar-amd64-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 CpuData.main(CpuData.java:59)
cpudata(sigar s) starting!!! cpuInfo() starting!!!
Exception in thread
"main" java.lang.UnsatisfiedLinkError:
org.hyperic.sigar.Sigar.getCpuInfoList()[Lorg/hyperic/sigar/C puInfo;
at org.hyperic.sigar.Sigar.getCpuInfoList(Native Method)
at CpuData.cpuInfo(CpuData.java:103)
at CpuData.<init>(CpuData.java:29)
at CpuData.main(CpuData.java:59)
- Затем я решил поместить .dll в ту же папку, что и мой проект.jar, и использовать в командной строке: java -Djava.library.path=./native/ -jar C:\cpu_usage_log\cpu3.jar (я m, предполагая, что здесь путь относится к папке, содержащей project.jar) ... но снова безуспешно:
Ошибка: невозможно найти или загрузить основной класс .library.path=..native
(Я подозревал, что мне следует указать имя основного класса в качестве второго аргумента после -Djava.library.path=./path/, но я не могу найти это предполагаемое имя «основного класса» или какие-либо примеры в Интернете, которые делают указать такой класс ... это основной класс из .dll?)
Я действительно не знаю, что еще попробовать на данный момент. Я читал, что эти 2 решения работали для других, и это еще больше расстраивает, потому что я представляю, что это может быть что-то очевидное, что я пропустил или не понял при чтении других сообщений и что я просто не могу найти (это первый раз, когда я имею дело с собственными DLL в проекте Java).