2013-02-10 46 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構建路徑中。