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.

Другие вопросы по тегам