我一直在尝试编写一个简单的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);
}
}
谢谢!