2013-02-10 1 views
0

Я пытаюсь написать простой монитор использования процессора в качестве доказательства концепции более крупного проекта. Я пишу в Eclipse Juno. Когда я нажимаю «Запуск», мое приложение работает так, как ожидалось, загрузка процессора отображается как процент, который обновляется раз в секунду. Однако, когда я экспортирую его в исполняемую банку, приложение, похоже, блокируется - оно никогда не отображает процент, и оно никогда не обновляется. Я определил, что графический интерфейс в порядке, но по какой-то необъяснимой причине мой метод cpuUtilization никогда не возвращает процент, не бросая исключение. Еще более странно, эта проблема возникает только при экспорте программы. Документация SIGAR довольно жестокая, но я думаю, что правильно ее использую. Вся остальная часть программы, похоже, работает, поэтому я буду включать только класс CPUReader. Он строится, когда построен класс CPUMonitorGUI, а CPUUtilization вызывается один раз в секунду CPUMonitorGUI. Некоторые дополнительные примечания: я импортировал файл sigar.jar, но не log4j.jar. Это не имеет никакого значения. Кроме того, в Eclipse я выбрал «Package Required Libraries в сгенерированный JAR» при экспорте.SIGAR Для Java в Mac OS X Кажется, это блокировка

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-разрядные драйверы Universal Mac OS X. Однако SIGAR предоставил эти файлы .dylib, которые Eclipse отказался загружать. Файлы .dylib должны были быть упакованы в архив .zip, который затем был добавлен в путь сборки Eclipse.