2013-02-10 34 views
0

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

谢谢!

回答

1

经过一番更多的实验后,我发现程序被冻结了,因为它正在寻找特定于操作系统和体系结构的SIGAR库。在这种情况下,它需要64位通用Mac OS X驱动程序。但是,SIGAR提供了这些作为.dylib文件,Eclipse拒绝加载。 .dylib文件必须打包在.zip存档中,然后将其添加到Eclipse构建路径中。