Java 如何将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

我有一个返回CPU值的GUI程序,这需要一个外部API。我制作了JAR,但除非我在netbeans IDE中运行程序,否则程序不会返回CPU。我的问题是如何将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){}
            }
        }
    }

您的程序无法运行,因为当您从命令行运行程序时,类路径中没有外部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百分比