-2

我有一个 java 类,我想在外部 jar 中加载一个类。

jar 是 xstream-1.4.2.jar 类是 com.thoughtworks.xstream.XStream

我在谷歌搜索,但我无法插入对我的项目(jar)的外部引用

这是我的代码:

File file  = new File("c:\\cubrid\\bin\\xstream-1.4.2.jar");
URL url = file.toURL();  
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("com.thoughtworks.xstream.XStream");
cadena = cls.toXML(objeto);

我不知道如何调用方法,我在 google 中阅读了一些文档,但很抱歉是我在 Java 上编程的第二天。

我想生成一个 .class 库。这是为另一个应用程序加载的。为此,我需要使用某种方法从外部加载 jar。

此类文件将作为 java 存储过程加载到 CUBRID 数据库服务器中。

我的问题是错误:java.lang.reflect.InvocationTargetException

我的代码

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.xml.parsers.DocumentBuilderFactory;

public class jp2 {

    static ResultSet resultado = null;
    static String cadena = null;
    static Statement statement = null;
    static DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   

public static String Validar(String tblUsuariosLogin,String tblUsuariosPassword)
{


    try {
        Class.forName("cubrid.jdbc.driver.CUBRIDDriver");
        Connection con = DriverManager.getConnection("jdbc:default:connection:"); 


            File file  = new File("c:\\cubrid\\bin\\xstream-1.4.2.jar");
            URL url = file.toURL();  
            URL[] urls = new URL[]{url};
            ClassLoader cl = new URLClassLoader(urls);

            Class cls = cl.loadClass("com.thoughtworks.xstream.XStream");

               // XStream xstream = new XStream();
                cadena = cls.toXML(objeto); 


            return cadena;

        } catch (Exception e) {
            // TODO: handle exception
        }
        return cadena;


    }



}

CUBRID 数据库允许您加载 .class 文件并在存储过程中使用它。

4

1 回答 1

4

看一下URLClassLoader,它允许您从外部 JAR 文件加载类。

/edit
你的问题是你试图调用一个Class对象的方法,而不是对象本身。如果要调用该方法,则需要创建一个新实例(参见提供的第二个方法)Class,并在结果上调用该方法。

你确定你不只是想在你的类路径上拥有那个 JAR 文件并直接处理类而不是使用反射来加载和实例化你需要的类吗?

于 2012-05-15T00:39:58.890 回答