gpt4 book ai didi

java - 如何在我的程序中加载 Jar 文件?

转载 作者:行者123 更新时间:2023-11-30 07:56:47 26 4
gpt4 key购买 nike

我正在尝试编写一个加载类和 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com