Я разрабатываю Java IDE для Windows в качестве учебного проекта и столкнулся с барьером, который не могу обойти.
Я использую JNI для вызова JVM и использую javac для компиляции своего кода.
JVM запускается правильно, и когда java-код компилируется в первый раз, JVM берет их из путей к классам и правильно запускает.
Но после того, как я редактирую java-файл, компилирую (использую скрипт для компиляции) и запускаю код, JVM по-прежнему загружает файл класса, который был скомпилирован во время первого запуска. Я должен остановить весь процесс и снова запустить JVM, чтобы изменения вступили в силу.
Я знаю, что должен быть способ, которым это обрабатывается в IDE, таких как Eclipse или IntelliJ. Но я не мог найти, как это сделать. Я был бы очень признателен, если кто-то может мне помочь.
Код, который я использовал для поиска и загрузки файлов классов, приведен ниже.
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;
}