我一直在嘗試編寫一個簡單的CPU利用率監視器作爲大型項目的概念證明。我正在使用Eclipse Juno編寫代碼。當我按「運行」時,我的應用程序按預期工作 - CPU利用率顯示爲每秒更新一次的百分比。但是,當我將它導出到可執行jar文件時,應用程序似乎鎖定 - 它從不顯示百分比,並且它永遠不會更新。我已經確定GUI是好的,但由於某些莫名其妙的原因,我的cpuUtilization方法永遠不會返回一個沒有拋出異常的百分比。即使很奇怪,只有在程序導出時纔會出現此問題。 SIGAR的文檔非常殘暴,但我認爲我正確使用它。程序的其餘部分似乎都可以工作,所以我只會包含CPUReader類。它是在構建CPUMonitorGUI類時構造的,並且CPUMonitorGUI每秒調用一次cpuUtilization。一些額外的注意事項:我已經導入了sigar.jar,但不是log4j.jar。這樣做沒有區別。另外,在Eclipse中,我在導出時選擇了「將必需的程序包打包到生成的JAR中」。SIGAR對於Mac OS X中的Java似乎鎖定了
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);
}
}
謝謝!