2013-02-10 2 views
0

큰 프로젝트의 개념 증명으로 간단한 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); 
    } 
} 

고마워요!

답변

1

몇 가지 실험을 한 후, 운영 체제 및 아키텍처와 관련된 SIGAR 라이브러리를 찾고 있었기 때문에 프로그램이 멈췄다는 것을 알았습니다. 이 경우 64 비트 Universal Mac OS X 드라이버가 필요했습니다. 그러나 SIGAR는 이것을 Eclipse가로드를 거부 한 .dylib 파일로 제공했습니다. .dylib 파일은 .zip 아카이브에 패키지화되어 Eclipse 빌드 경로에 추가되어야했습니다.