2014-02-23 39 views
0

我有一個返回CPU值的GUI程序,這需要一個外部API。我製作了JAR,但是除非我在netbeans IDE中運行該程序,否則該程序不會返回CPU。我的問題是如何將API打包到JAR文件中。如何將API打包到JAR中

private class getCpu extends Thread { 
     @Override 
     public void run() { 
      while(true) { 
       try { 
       Sigar sigar = new Sigar(); 
       Cpu cpu = new Cpu(); 
       CpuPerc perc = sigar.getCpuPerc(); 

       DecimalFormat df = new DecimalFormat("###.###"); 
       //df.format(100-(perc.getIdle()*100)); 
       cpuLabel.setText("CPU : "+df.format(100-(perc.getIdle()*100))+"%"); 

       try{Thread.sleep(1000);}catch(Exception e2){} 
       }catch(SigarException e1){} 
       catch(Exception e){} 
      } 
     } 
    } 
+0

什麼是「API」? – SLaks

+0

推測這個API是在某些庫JAR中定義和實現的。您需要確保在運行程序時JAR位於類路徑中。 –

+0

@OliCharlesworth請向我解釋這個 – Arc

回答

0

使用SIGAR的API,您必須將log4j.jar和sigar.jar添加到類路徑。但也需要將sigar-amd64-winnt.dll,sigar-x86-winnt.dll和sigar-x86-winnt.lib添加到最終版本的最終文件夾,否則Sigar將無法正常工作。

0

您的程序不工作,因爲你有你的classpath沒有「外部API」當您運行命令行程序(和你有ClassDefNotFoundException

爲了解決這個問題,您可以不要之一:

  • 添加外部API罐子類路徑: java -cp externalAPI.jar -jar jourProgram.jar

  • 將所有必要的類包裝到您的jar中。這是一個很好maven plugin它可以採取一切你的依賴,並打包成一個JAR文件 - https://maven.apache.org/plugins/maven-assembly-plugin/

+0

當我從命令行執行程序時,程序打開,但它仍然不會返回CPU,除非我在NetBeans中運行它。有任何想法嗎? – Arc

+0

任何異常或錯誤消息? 您可以粘貼一個命令,用於從命令行午餐程序嗎? –

+0

什麼都沒有錯誤。我cd到具有該jar的文件夾然後:java -jar GuiCpu.jar – Arc

相關問題