Java运行的外部代码

Java运行的外部代码,java,file,external,Java,File,External,我想要一个Java程序,它可以读取.CLASS文件并运行代码,将自身用作.CLASS文件的库。这可能吗?java.lang.ClassLoader 将帮助您加载外部类 java.lang.reflect.Method 将帮助您调用加载的外部类的方法 小小的例子: ArrayList<URL> urls = new ArrayList<URL>(); urls.add(new File("/path/to/your.class").toURI().toURL()); //c

我想要一个Java程序,它可以读取.CLASS文件并运行代码,将自身用作.CLASS文件的库。这可能吗?

java.lang.ClassLoader

将帮助您加载外部类

java.lang.reflect.Method

将帮助您调用加载的外部类的方法

小小的例子:

ArrayList<URL> urls = new ArrayList<URL>();
urls.add(new File("/path/to/your.class").toURI().toURL()); //can add several..

ClassLoader cl = new URLClassLoader(urls.toArray(new URL[urls.size()]));
Class<?> c;
c = Class.forName("your.class.name", false, cl); //now you have your class

Method m = c.getMethod("main", String[].class); //now your have your method
m.invoke(null, new Object[] { "argument1", "argument2" }); //now you "run that code"
ArrayList URL=new ArrayList();
add(新文件(“/path/to/your.class”).toURI().toul())//可以添加几个。。
ClassLoader cl=newurlclassloader(URL.toArray(newurl[URL.size()]);
丙级;;
c=Class.forName(“your.Class.name”,false,cl)//现在你上课了
方法m=c.getMethod(“main”,String[].class)//现在你有你的方法了
m、 调用(null,新对象[]{“argument1”,“argument2”})//现在你“运行代码”

我没有运行任何东西,我只是写了它,向您展示一些可以帮助您的工具。

WTF?不管它值多少钱,一个.jar文件只不过是一个.zip文件,里面有很多类(也许还有其他东西)。您可以使用WinZip读取.jar。除非您的.jar文件实际上是一个Java编译器,否则无法读取。请特别注意。我没有用过它,但我读过,在运行时可以通过这些工具将.java文件编译成.class文件。现在让我们假设.class文件尝试从主程序访问方法。您的代码允许类对象使用这些方法吗?这是一个很好的方法,但是路径必须指向存储.Class文件的文件夹层次结构的根(与设置类路径时的原则相同)。同样在这种情况下,立即创建URL[]会更容易(因为它将包含一个且仅包含一个元素)。Gyro:我想我明白你的意思,但我试图展示如何选择一个或某个特定类。取决于你的目标:)JavaCoder:我不确定你的意思。主程序->将加载类->它将调用刚刚加载该类的程序的一些方法?听起来很奇怪,但绝对不是不可能。好吧,事情对你来说越来越好了——错误的参数数量很清楚地说明了问题所在。如果基础方法所需的形式参数数为0,则提供的args数组的长度可能为0或null。这实际上取决于您试图执行的方法。