作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个加载类和 jar 文件的程序。我的应用程序处理加号运算符。为此,我有 2 个类和一个 jar 文件:
1- D:\operatorAPI 目录下的 Operator 接口(interface) jar 文件(Operator 接口(interface)是一个 jar 文件)
package OperatorAPI;
public interface Operator
{
int calculate(int num1 , int num2);
}
2-class Plus 位于目录 (D:\operators)
package operators;
import OperatorAPI.*;
public class Plus implements Operator
{
public int calculate(int num1 , int num2)
{
return num1 + num2;
}
}
3- 目录 D:\source\main 中的主类:
package source.main;
import java.util.*;
import java.io.*;
import java.net.URL;
import java.net.URLClassLoader;
import operatorAPI.*;
public class Main
{
public static void main(String[] args)
{
File file = new File("D:\\");
URI uri = file.toURI();
URL[] urls = new URL[] {uri.toURL}
ClassLoader classloader = new URLClassLoader (urls);
Class clazz = classloader.loadClass("operator.Plus");
Operator instance = (Operator) clazz.newInstance();
int output = instance.calculate(10,20);
System.out.println("The result is :" + output);
}
}
但是当我在命令行中运行程序时,我收到此异常:线程“main”java.lang.NoClassDefFoundError中的异常:operatorAPI/Operator
我认为因为运算符(operator)界面是一个 jar 文件,我应该将其加载到我的程序中,但我不知道如何执行此操作。谁能帮我吗?
最佳答案
目前您仅在类路径中使用 D:\
:
File file = new File("D:\\");
URI uri = file.toURI();
URL[] urls = new URL[] {uri.toURL}
ClassLoader classloader = new URLClassLoader (urls);
如果您想使用 jar 文件,您应该指定:
File file = new File("D:\\operator.jar");
如果这就是您需要加载新类加载器的全部内容,那么这应该是您唯一需要的更改。请注意,您可能希望将其设为命令行参数。
当您在“驱动程序”类中使用 Operator
时,您需要在运行的类路径中使用它。例如:
java -cp operatorAPI.jar;. source.main.Main
尽管编译时,您不应该需要将operator.jar
添加到类路径中...如果想法是编写一个“可插拔”系统,其他人应该这样做能够在编译时添加插件,而无需您对它们一无所知。您的代码和插件都应该只知道共享接口(interface)。
关于java - 如何在我的程序中加载 Jar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557951/
我是一名优秀的程序员,十分优秀!