我尝试将 jar 动态加载到我的 Java 项目中。
这是类加载器的代码:
public class ClassLoad {
public static void main(String[] args) {
String filePath = new String("C:/Users/Mehdi/Desktop/JavaClassLoader/jarred.jar");
URL myJarFile = null;
try {
myJarFile = new URL("file://"+filePath);
} catch (MalformedURLException e1) {
System.out.println("1");
e1.printStackTrace();
}
URLClassLoader cl = URLClassLoader.newInstance(new URL[]{myJarFile});
Class Jarred = null;
try {
Jarred = cl.loadClass("com.jarred.exp.Jarred");
} catch (ClassNotFoundException e) {
System.out.println("2");
e.printStackTrace();
}
Method simpleWrite = null;
try {
simpleWrite = Jarred.getMethod("simpleWrite", new Class[] {String.class});
} catch (SecurityException e) {
System.out.println("3");
e.printStackTrace();
} catch (NoSuchMethodException e) {
System.out.println("4");
e.printStackTrace();
}
Object JarredObj = null;
try {
JarredObj = Jarred.newInstance();
} catch (InstantiationException e) {
System.out.println("5");
e.printStackTrace();
} catch (IllegalAccessException e) {
System.out.println("6");
e.printStackTrace();
}
try {
Object response = simpleWrite.invoke(JarredObj, "\nHello Mehdi ! It works hamdoulillah :D");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
以及包含在 Jar 中的类:
package com.jarred.exp;
public class Jarred {
public void simpleWrite(String str) {
System.out.println(str);
}
}
它给了我:
2
java.lang.ClassNotFoundException: com.jarred.exp.Jarred
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.net.FactoryURLClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at ClassLoad.main(ClassLoad.java:25)
Exception in thread "main" java.lang.NullPointerException
at ClassLoad.main(ClassLoad.java:32)
你对此有什么想法吗?谢谢。
您的文件 URL 似乎无效。
“Windows 中的文件 URI” http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx says
对于本地 Windows 文件路径
C:\Documents and Settings\davris\FileSchemeURIs.doc
Windows 中对应的有效文件 URI 为:
file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc
这表明三斜杠冒号后面需要,但是您正在计算的 URL
String filePath = new String("C:/Users/Mehdi/Desktop/JavaClassLoader/jarred.jar");
URL myJarFile = null;
try {
myJarFile = new URL("file://"+filePath);
只有两条斜线之后file:
。也许
myJarFile = new URL("file://"+filePath);
应该
myJarFile = new URL("file:///"+filePath);
或者你也可以使用java.io.File.toURI http://docs.oracle.com/javase/6/docs/api/java/io/File.html#toURI%28%29 thus
File myJarFile = new File("C:\\Users\\Mehdi\\Desktop\\JavaClassLoader\\jarred.jar");
if (!myJarFile.isFile()) {
throw new FileNotFoundException("Missing required JAR: " + myJarFile.toString());
}
URL myJarUrl = myJarFile.toURI().toURL();
具有适当的异常处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)