Size: a a a

2020 July 06

d

d1vunit in pro.jvm
и еще такой вопрос возможно сделать глобальные переменные и их использовать ?
источник

AE

Alexandr Emelyanov in pro.jvm
d1vunit
и еще такой вопрос возможно сделать глобальные переменные и их использовать ?
Почему бы не найти на каком либо форуме ветку по jni? Тут тебе никто не отвечает и ты просто пишешь и пишешь
источник

d

d1vunit in pro.jvm
Alexandr Emelyanov
Почему бы не найти на каком либо форуме ветку по jni? Тут тебе никто не отвечает и ты просто пишешь и пишешь
Здесь есть контингент людей, которые разбираются в JNI.
источник

AE

Alexandr Emelyanov in pro.jvm
d1vunit
Здесь есть контингент людей, которые разбираются в JNI.
Но не видно активной дискуссии)
источник

AE

Alexandr Emelyanov in pro.jvm
d1vunit
Здесь есть контингент людей, которые разбираются в JNI.
Тебя никто не гонит, просто может быть эффективнее вопросы задавать там, где народу больше ответит
источник

d

d1vunit in pro.jvm
Alexandr Emelyanov
Тебя никто не гонит, просто может быть эффективнее вопросы задавать там, где народу больше ответит
а я не знаю куда идти :)
источник

d

d1vunit in pro.jvm
https://pastebin.com/vBEeb17C
https://pastebin.com/vBEeb17C
не подскажите почему происходит SIGSEV
происходит он на 11 инструкции вывод в терминал такой:
startup
1
2
3
4
5
6
7
8
9
10
11
и дальше fatalerror
источник

d

d1vunit in pro.jvm
и если не использовать:
if (env->ExceptionCheck())
       env->ExceptionClear();
то происходит следующее:
startup
1
2
3
4
5
6
7
8
9
Exception in thread "Thread-1" Exception in thread "Thread-0" java.lang.UnsatisfiedLinkError: 'void sych.SetData(java.lang.String)'
       at sych.SetData(Native Method)
java.lang.UnsatisfiedLinkError: 'void sych.SetData(java.lang.String)'
       at sych.SetData(Native Method)
10
11
и дальше fatalerror
источник

AS

Aleksey Shipilev in pro.jvm
А зачем вы делаете ExceptionClear, если у вас реальное исключение на руках? С ним нужно что-то сделать, а не тупо очищать. UnsatisfiedLinkError как правило означает, что в -Djava.library.path нету искомой библиотеки.
источник

AS

Aleksey Shipilev in pro.jvm
Ну и на самом классе звать object method -- это такое. Ошибка копипаста, скорее всего.
   auto sychdata = (jstring)env->CallObjectMethod(env->GetObjectClass(gsych),id_GetData);
источник

SS

Shamil Sabirov in pro.jvm
Alexandr Emelyanov
Почему бы не найти на каком либо форуме ветку по jni? Тут тебе никто не отвечает и ты просто пишешь и пишешь
а мне интересно. может не всегда могу подсказать. но как бывший сишник, интеграция с жавой всегда интересно и занимательно)
источник

d

d1vunit in pro.jvm
Aleksey Shipilev
Ну и на самом классе звать object method -- это такое. Ошибка копипаста, скорее всего.
   auto sychdata = (jstring)env->CallObjectMethod(env->GetObjectClass(gsych),id_GetData);
auto id_GetData = env->GetMethodID(env->GetObjectClass(gsych),"GetData","()Ljava/lang/String;");
   std::cout << "11\n";
   auto sychdata = (jstring)env->CallObjectMethod(env->GetObjectClass(gsych),id_GetData);
я продебажил именно здесь происходит fatalerror хотя указатель валидный
источник

A

Aleksandr in pro.jvm
Shamil Sabirov
а мне интересно. может не всегда могу подсказать. но как бывший сишник, интеграция с жавой всегда интересно и занимательно)
Недавно видел как знакомый решил с помощью JNI хакнуть один клиет MMORPG (написан на с++). Было забавно на это смотреть 😊
источник

AS

Aleksey Shipilev in pro.jvm
d1vunit
auto id_GetData = env->GetMethodID(env->GetObjectClass(gsych),"GetData","()Ljava/lang/String;");
   std::cout << "11\n";
   auto sychdata = (jstring)env->CallObjectMethod(env->GetObjectClass(gsych),id_GetData);
я продебажил именно здесь происходит fatalerror хотя указатель валидный
Насколько я помню спеку JNI, вы таким кодом зовёте метод на инстансе *класса*, а не на инстансе объекта. Т.е. вы пытаетесь позвать obj.getClass().GetData() вместо obj.GetData(). Так понятнее?
источник

d

d1vunit in pro.jvm
Aleksey Shipilev
Насколько я помню спеку JNI, вы таким кодом зовёте метод на инстансе *класса*, а не на инстансе объекта. Т.е. вы пытаетесь позвать obj.getClass().GetData() вместо obj.GetData(). Так понятнее?
да да я не внимателен надо объект класса указывать
источник

d

d1vunit in pro.jvm
Aleksey Shipilev
Насколько я помню спеку JNI, вы таким кодом зовёте метод на инстансе *класса*, а не на инстансе объекта. Т.е. вы пытаетесь позвать obj.getClass().GetData() вместо obj.GetData(). Так понятнее?
спасибо)
источник

A

Aleksandr in pro.jvm
Тут наткнулся на вопросик на SO https://stackoverflow.com/questions/20918825/can-spring-autowired-map

Вот что стало интересно, умеет ли spring инжектить мапу с ключем-енумом?
Map<Enum, Bean>


Например, есть енум со стринговым значением, а Bean - это имплементация некого интерфейса с Qualifier пометкой у каждого класса-наследника, который совпадает со стринговым значением енума
источник

AG

Alexey Genus in pro.jvm
Нет, так он не умеет. Я как-то исследовал этот момент и выяснилось, что в конечном счёте все пользовательские @Qualifier превращаются в строки внутри
источник

A

Aleksandr in pro.jvm
Alexey Genus
Нет, так он не умеет. Я как-то исследовал этот момент и выяснилось, что в конечном счёте все пользовательские @Qualifier превращаются в строки внутри
Т.е никак красиво это нельзя заинжектить?(
источник

NG

Nikita Gryzlov in pro.jvm
Aleksandr
Т.е никак красиво это нельзя заинжектить?(
@Configuration-классы творят чудеса :)
источник