0

大規模なプロジェクトの概念実証として、単純な CPU 使用率モニターを作成しようとしています。私はEclipse Junoで書いています。「実行」を押すと、アプリケーションは期待どおりに動作します。CPU 使用率は、1 秒ごとに更新されるパーセントとして表示されます。ただし、実行可能なjarにエクスポートすると、アプリケーションがロックされているように見えます-パーセンテージが表示されず、更新されません。GUI は正常であると判断しましたが、何らかの不可解な理由により、私の cpuUtilization メソッドは例外をスローせずにパーセンテージを返しません。さらに奇妙なことに、この問題はプログラムがエクスポートされたときにのみ発生します。SIGAR のドキュメントは非常にひどいものですが、私はそれを正しく使用していると思います。プログラムの残りの部分はすべて機能しているように見えるので、CPUReader クラスのみを含めます。CPUMonitorGUI クラスの構築時に構築され、CPUMonitorGUI によって 1 秒に 1 回 cpuUtilization が呼び出されます。いくつかの追加メモ: sigar.jar をインポートしましたが、log4j.jar はインポートしませんでした。そうしても違いはありません。また、Eclipse では、エクスポート時に「必要なライブラリを生成された JAR にパッケージ化」を選択しました。

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);
    }
}

ありがとう!

4

1 に答える 1

1

さらに実験を重ねた結果、オペレーティング システムとアーキテクチャに固有の SIGAR ライブラリを探していたため、プログラムがフリーズしていることがわかりました。この場合、64 ビットの Universal Mac OS X ドライバーが必要でした。ただし、SIGAR はこれらを .dylib ファイルとして提供し、Eclipse はロードを拒否しました。.dylib ファイルは .zip アーカイブにパッケージ化する必要があり、それが Eclipse ビルド パスに追加されました。

于 2013-02-15T04:42:28.987 に答える