我正在为Windows开发一个Java IDE,作为一个学习项目,我遇到了一个无法找到解决办法的障碍。
我正在使用JNI来调用JVM并使用javac来编译我的代码。
JVM正常启动,当第一次编译java代码时,JVM从类路径中获取它们并正确运行它。
但是在编辑java文件,编译(使用脚本编译)并运行代码之后,JVM仍然会加载在第一次运行期间编译的类文件。我必须停止整个过程并再次启动JVM才能进行更改。
我知道应该有一种方法可以在Eclipse或IntelliJ等IDE中处理。但我似乎无法找到如何。如果有人可以帮助我,我真的很感激。
我用来查找和加载类文件的代码如下。
bool load(const char* classFile)
{
JNIEnv* env;
bool isAttached = Interpreter::getEnv(&env);
auto javacls = env->FindClass(classFile);
if (javacls == nullptr)
{
getLogger().error("ERR: Loading class file %s failed", classFile);
env->ExceptionDescribe();
return false;
}
auto classInstance = getObject(javacls);
if (classInstance == nullptr)
{
getLogger().error("ERR: Invalid Object");
return false;
}
return true;
}
答案 0 :(得分:0)
您应该在单独的ClassLoader
下运行测试下的代码,并在每次编译后使用一个新代码,甚至可以用于每次运行。
您不需要任何JNI。
答案 1 :(得分:0)
我用于此的解决方案是创建一个调用JVM的子进程,然后执行需要完成和退出的所有操作。这样,每次调用子进程时,它都会创建一个新的JVM,因此每次都会加载更改的类文件。