SIGAR для Java в Mac OS X, кажется, блокируется
Я пытался написать простой монитор загрузки процессора в качестве доказательства концепции для более крупного проекта. Я пишу в "Затмении Юноны". Когда я нажимаю "Выполнить", мое приложение работает должным образом - загрузка ЦП отображается в процентах, которые обновляются раз в секунду. Однако, когда я экспортирую его в исполняемый файл jar, приложение, кажется, блокируется - оно никогда не отображает процент и никогда не обновляется. Я определил, что графический интерфейс в порядке, но по какой-то необъяснимой причине мой метод cpuUtilization никогда не возвращает процент, даже не выдавая исключение. Даже более странно, эта проблема возникает только при экспорте программы. Документация SIGAR довольно зверская, но я думаю, что использую ее правильно. Кажется, что все остальное в программе работает, поэтому я включу только класс CPUReader. Он создается, когда создается класс CPUMonitorGUI, и cpuUtilization вызывается CPUMonitorGUI раз в секунду. Некоторые дополнительные замечания: я импортировал sigar.jar, но не log4j.jar. Это не имеет значения. Кроме того, в Eclipse я выбрал "Пакет обязательных библиотек в сгенерированный JAR" при экспорте.
package cpuperc;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.Humidor;
import org.hyperic.sigar.SigarProxy;
public class CPUReader
{
static Humidor h;
public CPUReader()
{
h = Humidor.getInstance();
}
public double cpuUtilization() throws SigarException
{
//Returns CPU utilization as truncated two-decimal percent
SigarProxy sp = h.getSigar();
CpuPerc cp = sp.getCpuPerc();
double combined;
double total;
double idle;
double percentUsed;
int truncate = 0;
//get CPU times
combined = cp.getCombined();
idle = cp.getIdle();
total = idle + combined;
//determine percent and truncate
percentUsed = ((double)combined/total)*100;
truncate = (int)(percentUsed*100.0);
percentUsed = (double)truncate/100;
return(percentUsed);
}
}
Спасибо!
1 ответ
После нескольких экспериментов я обнаружил, что программа зависает, потому что она ищет библиотеки SIGAR, специфичные для операционной системы и архитектуры. В данном случае ему нужны были 64-битные универсальные драйверы Mac OS X. Однако SIGAR предоставил их в виде файлов.dylib, которые Eclipse отказался загружать. Файлы.dylib должны были быть упакованы в архив.zip, который затем был добавлен в путь сборки Eclipse.