大規模なプロジェクトの概念実証として、単純な 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);
}
}
ありがとう!