Я пытаюсь написать простой монитор использования процессора в качестве доказательства концепции более крупного проекта. Я пишу в 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);
}
}
Спасибо!