Mac OS X中的SIGAR For Java似乎正在锁定
我一直在尝试编写一个简单的CPU利用率监视器,作为一个更大项目的概念证明。我正在用EclipseJuno写作。当我按“Run”时,我的应用程序按预期工作-CPU利用率以百分比显示,每秒更新一次。然而,当我将其导出到可执行jar时,应用程序似乎被锁定了——它从不显示百分比,也从不更新。我已经确定GUI是好的,但是由于一些无法解释的原因,我的cpuUtilization方法从未返回一个百分比而不抛出异常。更奇怪的是,这个问题只有在程序导出时才会发生。SIGAR的文档非常糟糕,但我认为我使用它是正确的。程序的所有其余部分似乎都正常工作,所以我只包括CPUReader类。它是在构造CPUMonitorGUI类时构造的,CPUMonitorGUI每秒调用一次cpuUtilization。一些附加说明:我已经导入了sigar.jar,但没有导入log4j.jar。这样做没有什么区别。此外,在Eclipse中,我在导出时选择了“将所需库打包到生成的JAR中”Mac OS X中的SIGAR For Java似乎正在锁定,java,macos,compilation,freeze,sigar,Java,Macos,Compilation,Freeze,Sigar,我一直在尝试编写一个简单的CPU利用率监视器,作为一个更大项目的概念证明。我正在用EclipseJuno写作。当我按“Run”时,我的应用程序按预期工作-CPU利用率以百分比显示,每秒更新一次。然而,当我将其导出到可执行jar时,应用程序似乎被锁定了——它从不显示百分比,也从不更新。我已经确定GUI是好的,但是由于一些无法解释的原因,我的cpuUtilization方法从未返回一个百分比而不抛出异常。更奇怪的是,这个问题只有在程序导出时才会发生。SIGAR的文档非常糟糕,但我认为我使用它是正确的
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);
}
}
谢谢 经过更多的实验后,我发现程序正在冻结,因为它正在寻找特定于操作系统和体系结构的SIGAR库。在这种情况下,它需要64位通用Mac OS X驱动程序。然而,SIGAR提供了这些.dylib文件,Eclipse拒绝加载这些文件。.dylib文件必须打包在.zip存档中,然后将其添加到Eclipse构建路径中