Информация об изменениях

Сообщение Re[8]: JNI Attach от 04.11.2024 14:08

Изменено 04.11.2024 14:09 Pavel Dvorkin

Re[8]: JNI Attach
Здравствуйте, ·, Вы писали:

·>Так ведь тут не приаттачиться к VM из "главного" приложения и догрузить туда еще пачку JAR, а создать новый класслоадер с новыми источниками классов. Разница принципиальная.


Ну и что ? Надо как-то из библиотеки/плугина вызывать некий метод из java класса, а он пусть делает то, что в

public C LoadClass(String directory, String classpath, Class<C> parentClass) throws ClassNotFoundException {

Надо новый класслоадер делать — пусть делает, какая разница ?

·>"Ну может, тогда и не нужен GetJavaVM" — верно, что я сразу и сказал.


Я в первом же ответе написал, что отнюдь не специалист по JNI. И то, что JNIEnv передается в любой метод, я просто не знал. Если так, то все еще проще.

PD>> А что делать — jclass cls2 = env->FindClass("MyTest"); // try to find the class

·>ИЧСХ тут никакого "догрузить туда еще пачку JAR" нет. Классы будут искаться только из текущей запущенной VM, ничего догруженного тут быть не может.

Ну тут я не понимаю. Я же дал ссылку, где из directory их загружают.

Here is some code that will help you dynamically load a new class given the path to its jar file.

https://stackabuse.com/example-loading-a-java-class-at-runtime/

Там неверно ?
Re[8]: JNI Attach
Здравствуйте, ·, Вы писали:

·>Так ведь тут не приаттачиться к VM из "главного" приложения и догрузить туда еще пачку JAR, а создать новый класслоадер с новыми источниками классов. Разница принципиальная.


Ну и что ? Надо как-то из C/C++ библиотеки/плугина вызывать некий метод из java класса, а он пусть делает то, что в

public C LoadClass(String directory, String classpath, Class<C> parentClass) throws ClassNotFoundException {

Надо новый класслоадер делать — пусть делает, какая разница ?

·>"Ну может, тогда и не нужен GetJavaVM" — верно, что я сразу и сказал.


Я в первом же ответе написал, что отнюдь не специалист по JNI. И то, что JNIEnv передается в любой метод, я просто не знал. Если так, то все еще проще.

PD>> А что делать — jclass cls2 = env->FindClass("MyTest"); // try to find the class

·>ИЧСХ тут никакого "догрузить туда еще пачку JAR" нет. Классы будут искаться только из текущей запущенной VM, ничего догруженного тут быть не может.

Ну тут я не понимаю. Я же дал ссылку, где из directory их загружают.

Here is some code that will help you dynamically load a new class given the path to its jar file.

https://stackabuse.com/example-loading-a-java-class-at-runtime/

Там неверно ?