我有一个问题: 有一个从外部.java文件编译的类
private static Class<?> LoadedClass;
private static Object LoadedClassInstance;
public static Method LoadedMethod;
[SKIP]
private static Path compileSource(Path javaFile) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null,null,javaFile.toFile().getabsolutePath());
return javaFile.getParent().resolve("LoadedClass.class");
}
private static void runClass(Path javaClass)
throws MalformedURLException,ClassnotFoundException,IllegalaccessException,InstantiationException,IllegalArgumentException,invocationTargetException,NoSuchMethodException,SecurityException {
URL classUrl = javaClass.getParent().toFile().toURI().toURL();
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{classUrl});
LoadedClass = Class.forName("LoadedClass",true,classLoader);
在此类中,有一个方法:
LoadedClassInstance = LoadedClass.getDeclaredConstructor().newInstance();
LoadedMethod = LoadedClass.getDeclaredMethod("DoTheMethod");
}
这是调用已加载方法的静态方法:
public static void CallLoadedMethod() throws IllegalaccessException,invocationTargetException {
LoadedMethod.invoke(LoadedClassInstance);
}
已加载方法调用另一个方法:
import MyApp.MyClass1;
[SKIP]
public static void DoTheMethod() {
System.out.println("Your number is : "+MyClass1.Number);
}
我还有另外两个课程可以参加:
// MyClass1
public static int Number = 5;
public class MyClass1 {
// DoSomeStuff
}
// MyClass2
public class MyClass2 {
public static void SetTheNumberTo(int number){
MyClass1.Number = number;
System.out.println("Your NEW number is : "+MyClass1.Number);
}
}
这里是Loaded方法调用示例:
MyClass2.SetTheNumberTo(10);
Class_Loader.DoTheMethod();
当我通过eclipse运行我的应用程序时,我得到:
您的新电话号码是:10
您的电话号码是:10
但是当我将其编译为可运行的.jar时,我得到了另一个结果:
您的新电话号码是:10
您的电话号码是:5
这是问题:我在做什么错了?