Java 如何将API打包到JAR中
我有一个返回CPU值的GUI程序,这需要一个外部API。我制作了JAR,但除非我在netbeans IDE中运行程序,否则程序不会返回CPU。我的问题是如何将API打包到JAR文件中Java 如何将API打包到JAR中,java,api,jar,Java,Api,Jar,我有一个返回CPU值的GUI程序,这需要一个外部API。我制作了JAR,但除非我在netbeans IDE中运行程序,否则程序不会返回CPU。我的问题是如何将API打包到JAR文件中 private class getCpu extends Thread { @Override public void run() { while(true) { try { Sigar siga
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){}
}
}
}
您的程序无法运行,因为当您从命令行运行程序时,类路径中没有外部API,并且出现ClassDefNotFoundException 要解决此问题,您可以执行以下操作之一: 将外部API jar添加到类路径: java-cp externalAPI.jar-jar jourProgram.jar 将所有必需的类打包到jar中。有一个很好的maven插件,它可以将所有依赖项打包到一个jar文件中-
使用sigar的API时,必须将log4j.jar和sigar.jar添加到类路径中。但您还需要将sigar-amd64-winnt.dll、sigar-x86-winnt.dll和sigar-x86-winnt.lib添加到最终版本的最终文件夹中,否则sigar将无法正常工作。可能该API是在某个库JAR中定义和实现的。运行程序时,您需要确保JAR位于类路径上。@OliCharlesworth请向我解释这一点,我认为您想要实现这一点:当我从命令行执行时,程序会打开,但它仍然不会返回cpu,除非我在NetBeans内部运行它。有什么想法吗?有例外或错误信息吗?你能从命令行粘贴一个你用来运行程序的命令吗?没有任何错误。我将cd放入包含jar的文件夹,然后:java-jar GuiCpu.jar,但是您不会像:-cp external.jar那样将外部API添加到类路径中,因为您可能会吞下异常,所以没有错误。粘贴负责接收cpu负载的代码。好的,我添加了该代码,但另一方面,该代码在netbeans中运行良好,但当我在netbeans中构建jar时,它在netbeans之外无法工作。它将打开,但无法获取cpu百分比