JNI не может найти класс, если аргументы JVM преобразуются из другого типа [Закрыто] -- java поле с участием c++ поле с участием qt поле с участием jvm поле с участием java-native-interface пол Связанный проблема

jni can't find the class if the arguments of jvm are converted from other type [closed]


2
vote

проблема

русский
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»>
<Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 5.6A6.31 6.31 0 002.39 5.75C.49.39.76.93.76 1.5V.24C0 1.07.89 1.9 1.92 1.92.75C1.04 0 1.92-.83 1.92-1.9v-. 2C0-.6.26-1.15.7-1.6.26-1.15.7-1.48A6.32 6.32 0 0015 6.37ZM4.03 5.85A4.49 4.49 0 018 2.02A4.48 4,48 0 015 4.36 4.3 4,3 0 01-1.72 3.44C-01-1.74-1.5 1.9- 1.5 3.08V.1H7.2V-.14C0-1.23-.6-2.34-1.3-1.32.32-1.53-3.07A4.32.32.32 0 01-1.64-3.94ZM10 18A1 1 0 000-2х7А1 1 0 100 2H3Z ">
Трудно сказать, что здесь спрашивает. Этот вопрос неоднозначный, расплывчатый, неполный, чрезмерно широкий или риторический, и не может быть разумно отвечать в его текущей форме. Для уточнения этого вопроса, чтобы его можно было возобновить, Посетите справочный центр .
Закрыто 8 лет назад .

У меня небольшая проблема с JNI и C ++ / QT: Это мой код:

 <код> void Jvm::create_jvm(QStringList &arguments){     QTextStream cout(stdout);     JavaVM *jvm;     JNIEnv *env;     JavaVMInitArgs vm_args;     JavaVMOption *options[4];     //run begin     //options[0].optionString = "-Djava.compiler=NONE";     //options[1].optionString = "-Djava.class.path=app";     //options[2].optionString = "-verbose:jni";     //options[3].optionString = "-Xmx512m";     //run end      //can't find the class begin     QByteArray bArray;     cout<<"Valores del array arguments"<<endl;     for(int i;i<arguments.size();i++){          cout<<arguments.at(i)<<endl;         bArray=arguments.at(i).toStdString().c_str();         options[i].optionString = bArray.data();         cout<<options[i].optionString<<endl;     }     //can't find the class end       //jvm args     vm_args.version = JNI_VERSION_1_6;     vm_args.nOptions = 4;     vm_args.options = options;     vm_args.ignoreUnrecognized = JNI_FALSE;       jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);     if (res < 0) {//jvm don't created         qDebug()<<"Can't create Java VM ";         exit(1);     }else{//jvm created         invoke_class(env);         jvm->DestroyJavaVM();     } }  void Jvm::invoke_class(JNIEnv* env) {     jclass cls;     jmethodID mainMethod;     jobjectArray applicationArgs;     jstring applicationArg0,applicationArg1,applicationArg2;      //class and main method     cls = env->FindClass("HolaMundoSwing");     if (cls == 0) qDebug()<<"Sorry, I can't find the class"; //In case that class not exist     mainMethod = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");      //Application arguments array     applicationArgs = env->NewObjectArray(3, env->FindClass("java/lang/String"), NULL);     applicationArg0 = env->NewStringUTF("From");     applicationArg1 = env->NewStringUTF("C");     applicationArg2 = env->NewStringUTF("program");      env->SetObjectArrayElement(applicationArgs, 0, applicationArg0);     env->SetObjectArrayElement(applicationArgs, 1, applicationArg1);     env->SetObjectArrayElement(applicationArgs, 2, applicationArg2);      env->CallStaticVoidMethod(cls, mainMethod, applicationArgs); //Call to the method }   

Я проверил аргументы и одинаковы. Класс имеет одинаковое значение, но прокомментированный код работает правильно, а другой код не может найти класс, любую идею?

Английский оригинал

I have a small-big problem with jni and c++/qt: This is my code:

void Jvm::create_jvm(QStringList &arguments){     QTextStream cout(stdout);     JavaVM *jvm;     JNIEnv *env;     JavaVMInitArgs vm_args;     JavaVMOption *options[4];     //run begin     //options[0].optionString = "-Djava.compiler=NONE";     //options[1].optionString = "-Djava.class.path=app";     //options[2].optionString = "-verbose:jni";     //options[3].optionString = "-Xmx512m";     //run end      //can't find the class begin     QByteArray bArray;     cout<<"Valores del array arguments"<<endl;     for(int i;i<arguments.size();i++){          cout<<arguments.at(i)<<endl;         bArray=arguments.at(i).toStdString().c_str();         options[i].optionString = bArray.data();         cout<<options[i].optionString<<endl;     }     //can't find the class end       //jvm args     vm_args.version = JNI_VERSION_1_6;     vm_args.nOptions = 4;     vm_args.options = options;     vm_args.ignoreUnrecognized = JNI_FALSE;       jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);     if (res < 0) {//jvm don't created         qDebug()<<"Can't create Java VM ";         exit(1);     }else{//jvm created         invoke_class(env);         jvm->DestroyJavaVM();     } }  void Jvm::invoke_class(JNIEnv* env) {     jclass cls;     jmethodID mainMethod;     jobjectArray applicationArgs;     jstring applicationArg0,applicationArg1,applicationArg2;      //class and main method     cls = env->FindClass("HolaMundoSwing");     if (cls == 0) qDebug()<<"Sorry, I can't find the class"; //In case that class not exist     mainMethod = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");      //Application arguments array     applicationArgs = env->NewObjectArray(3, env->FindClass("java/lang/String"), NULL);     applicationArg0 = env->NewStringUTF("From");     applicationArg1 = env->NewStringUTF("C");     applicationArg2 = env->NewStringUTF("program");      env->SetObjectArrayElement(applicationArgs, 0, applicationArg0);     env->SetObjectArrayElement(applicationArgs, 1, applicationArg1);     env->SetObjectArrayElement(applicationArgs, 2, applicationArg2);      env->CallStaticVoidMethod(cls, mainMethod, applicationArgs); //Call to the method } 

I have tested the arguments and are the same. The classpath have the same value, but the commented code run correctly and the other code can't find the class, any idea?

</div
              
   
   

Список ответов

0
 
vote

Ваш сервисный цикл содержит ошибку:

 <код> for( int i; i < arguments.size(); i++ )   

должен быть

 <код> for( int i = 0; i < arguments.size(); i++ )   

в противном случае <код> i будет иметь любое произвольное начало (по крайней мере, с моим компилятором)

 

Your for-loop contains an error:

for( int i; i < arguments.size(); i++ ) 

should be

for( int i = 0; i < arguments.size(); i++ ) 

Otherwise i will have any random start value (at least with my compiler)

</div
 
 

Связанный проблема

56  Когда использовать явное ожидание против неявного ожидания в Webdriver Selenium?  ( When to use explicit wait vs implicit wait in selenium webdriver ) 
Я использую: <код> driver.manage().timeouts().implicitlyWait(180, TimeUnit.SECONDS); Но он все еще непрерывно не работает для нижеизведанного элемента ...

2  Javafx Treeview клеточная фабрика с гридпаном  ( Javafx treeview cell factory with gridpane ) 
У меня есть <код> TreeView<GridPane> и <код> GridPane содержит несколько узлов, таких как кнопки и метки. Количество узлов внутри <Код> GridPane варьируетс...

49  Как извлечь строку между двумя разграничителями [дубликат]  ( How to extract a string between two delimiters ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

1  Кварц Schdeuler для нескольких проектов в JBOSS 5  ( Quartz schdeuler for multiple projects in jboss 5 ) 
Я развернул два проекта (P1 & AMP; P2) в JBOSS 5. Оба проекта настроены с различными кварцевыми планировщиками. Но когда я заплатурую работу на P1, он доступа...

0  Jframe + Canvas: почему я получаю NullPointerException при звонке Glviewport?  ( Jframe canvas why do i get a nullpointerexception when calling glviewport ) 
Я создал JFrame с холстом в нем, как вы можете видеть в коде ниже. То, что я пытаюсь сделать, это сделать контекст OpenGL, когда размер экрана обновляется. Эт...

1  Обратитесь к веб-странице внутри файла JAR  ( Refer to a web page inside a jar file ) 
У меня есть рабочий проект. Он включает в себя другой проект, который имеет дело с отдыхом как REST-API.jar. Теперь я сделал одностраничное интернет-интерфе...

0  Общее утверждение для ошибки recuralandom return - Java  ( General statement for securerandom return error java ) 
Я искал на протяжении разных форумов, и теперь я наконец-то ставит свой вопрос, так как я не могу найти конкретный ответ. Я пишу протокол безопасности для д...

1  Android ListView с некоторыми показанными элементами и показывать больше кнопки  ( Android listview with some items shown and show more button ) 
Я нахожу его трудно искать то, что я ищу, поэтому я думал, что постараюсь объяснить это здесь. В настоящее время у меня есть пользовательский список в ScrollV...

-2  В классе F250.java есть две петли, которые не будут работать  ( There are two loops in the f250 java class that wont run ) 
Класс F250.java - это объект оружия, и есть два метода, которые привлекают и обновляют пули, выходящие из пистолета. Я сделал класс пули и сделал массив пули ...

4  Как полностью квалифицировать класс, имя пакета которого сталкивается с местным именем члена?  ( How to fully qualify a class whose package name collides with a local member nam ) 
ОК, вот очень любопытная языковая головоломка Java 7 для специалистов JLS там. Следующий кусок кода не скомпилируется, ни с Javac, ни с Eclipse: <код> ...

1  Улучшение моего жадного алгоритма  ( Improving my greedy algorithm ) 
** Это мой код, который выглядит способ найти сумму в массиве ** <код> public class Piecedemonei { public static void recherche(int[] tab) { ...

1  Как увеличить предел параллельного соединения OpenFire?  ( How to increase openfire concurrent connection limit ) 
Я пытаюсь проверить, сколько одновременных пользовательских подключений Openfire может обрабатывать. Я заметил предел при 4000 пользователями. Как я могу ...

6  Есть ли какие-либо эффективные классы Arraylist 2D для Java?  ( Are there any efficient 2d arraylist classes for java ) 
Я знаю, что можно создать 2D ArrayList с button0 , но это громоздкий и реальный кошмар, когда речь идет о добавлении и извлечения объектов. Есть ли какие-н...

0  Строка заменить приключение в Java  ( String replace adventure in java ) 
Я пытаюсь добиться этого - если строка содержит шаблон <код> %25 с последующим любое количество альфа-цифровых символов, то мне нужно заменить <код> %25 с <...

1  Могу ли я нажать на свой собственный объект пользователя в Security SecurityContext?  ( Can i push my own user object into springs securitycontext ) 
Я новичок в весенней безопасности и последовал за некоторыми основными рецептами, чтобы получить весеннюю безопасность, работающую в моем заявлении, но теперь...

Связанный проблема

56  Когда использовать явное ожидание против неявного ожидания в Webdriver Selenium? 
2  Javafx Treeview клеточная фабрика с гридпаном 
49  Как извлечь строку между двумя разграничителями [дубликат] 
1  Кварц Schdeuler для нескольких проектов в JBOSS 5 
0  Jframe + Canvas: почему я получаю NullPointerException при звонке Glviewport? 
1  Обратитесь к веб-странице внутри файла JAR 
0  Общее утверждение для ошибки recuralandom return - Java 
1  Android ListView с некоторыми показанными элементами и показывать больше кнопки 
-2  В классе F250.java есть две петли, которые не будут работать 
4  Как полностью квалифицировать класс, имя пакета которого сталкивается с местным именем члена? 
1  Улучшение моего жадного алгоритма 
1  Как увеличить предел параллельного соединения OpenFire? 
6  Есть ли какие-либо эффективные классы Arraylist 2D для Java? 
0  Строка заменить приключение в Java 
1  Могу ли я нажать на свой собственный объект пользователя в Security SecurityContext?