큰 프로젝트의 개념 증명으로 간단한 CPU 사용률 모니터를 작성하려고했습니다. 나는 Eclipse Juno에서 글을 쓰고있다. "실행"을 누르면 응용 프로그램이 예상대로 작동합니다. CPU 사용률은 매초마다 한 번씩 업데이트되는 백분율로 표시됩니다. 그러나 실행 가능한 jar 파일로 내보낼 때 응용 프로그램이 잠겨있는 것처럼 보입니다. 절대 백분율을 표시하지 않으며 결코 업데이트되지 않습니다. 나는 GUI가 괜찮다고 결론을 내 렸지만, 설명 할 수없는 이유로 내 cpuUtilization 메소드는 결코 예외를 던지지 않고 백분율을 반환하지 않습니다. 심지어 더 이상,이 문제는 프로그램을 내보낼 때만 발생합니다. SIGAR의 문서는 꽤 잔인하다. 그러나 나는 그것을 올바르게 사용하고 있다고 생각한다. 나머지 모든 프로그램은 작동하는 것처럼 보이므로 CPUReader 클래스 만 포함합니다. CPUMonitorGUI 클래스가 생성 될 때 생성되며 cpuUtilization은 CPUMonitorGUI에 의해 초당 한 번 호출됩니다. 몇 가지 추가 정보 : sigar.jar는 가져 왔지만 log4j.jar는 가져 오지 않았습니다. 그렇게하면 아무런 효과가 없습니다. 또한 이클립스에서는 내보낼 때 "생성 된 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);
}
}
고마워요!