gpt4 book ai didi

java - 在 C++ 中使用 java 类时找不到类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:52 24 4
gpt4 key购买 nike

我正在关注 https://www.ibm.com/developerworks/java/tutorials/j-jni/j-jni.html在 c++ 代码中使用 java 类函数。我使用的代码与他们用于 Sample2.java 的代码相同。我用两种不同的方式做到了。

第一种方式:我在“sublime text editor”中复制并粘贴了相同的代码,并将其保存在 Desktop 中的名称 Sample2.java 下。代码如下:

 public class Sample2
{
public static int intMethod(int n)
{
return n*n;
}

public static boolean booleanMethod(boolean bool)
{
return !bool;
}
}

然后我用下面的代码编译它: javac Sample2.java

我的 C++ 代码如下所示:

#include <iostream>
#include "jni.h"
#include <string.h>
#include <typeinfo>
int main()
{
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean answer;

options[0].optionString = const_cast<char *>("-Djava.class.path=/home/aaa/Desktop/");

memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_8;
vm_args.nOptions = 1;
vm_args.options = options;
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); //If JVM creation is successful then status value is zero
std::cout<<"Status of JNI creation is : "<<status<<std::endl;

if (status != JNI_OK)
{
std::cout<<"JNI creation Failed : "<<std::endl;
return 1;
}
std::cout<<"JNI creation Passed : "<<std::endl;
cls = env->FindClass("Sample2"); // If the class cannot be found, cls will be zero.
std::cout<<"The class of cls is : "<<typeid(cls).name()<<std::endl;
// cls = env->FindClass("Sample2");
std::cout<<"The value of cls is : "<<cls<<std::endl;
if(cls !=0)
{ mid = env->GetStaticMethodID(cls, "intMethod", "(I)I");
if(mid !=0)
{ square = env->CallStaticIntMethod(cls, mid, 5);
printf("Result of intMethod: %d\n", square);
}
}
jvm->DestroyJavaVM();
return 0;
}

现在,当我在“Ubuntu”终端中使用以下命令时,C++ 代码成功执行了 java 函数。

简单的文本编辑器和使用 eclipse。 JNI 与使用简单的文本编辑器编写的 Sample2.java 代码完美配合。但是,当我在包 cversion.xeger 中使用相同的 Sample2.java 代码时,它以某种方式无法从 C++ 代码中找到类 Sample2.java 和 Sample2.java 类的函数 intMethod。

g++ -g -I/usr/lib/jvm/java-8-oracle/include/ -I/usr/lib/jvm/java-8-oracle/include/linux/ -L/usr/bin/java -L/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/ intMethod.cpp -ljvm

问题:当我在 cversion.xeger 包下的 eclipse 中编写相同的 Sample2.java 代码时,就会出现问题。 eclipse 中的 Sample2.java 代码与前面相同,只是它的包名称位于顶部。看起来像 :包 cversion.xeger;

public class Sample2
{
public static void main(String args[]) {
System.out.println("Helloworld");
}
public static int intMethod(int n)
{
return n*n;
}

public static boolean booleanMethod(boolean bool)
{
return !bool;
}
}

我将 Cpp 文件中的类路径更改为:

 options[0].optionString = const_cast<char *>("-Djava.class.path=/home/aaa/eclipse-workspace/xeger/target/classes/");

和 cls 值到

cls=env->FindClass("cversion.xeger.Sample2");

但 cls 值为零。这意味着它无法找到该类。

我已经在 Ecllipse 工作区内提供了类路径,我正在使用 FindClass() 方法内的“packagename.Sample2”调用 Sample2 类。

为什么我在eclipse中使用Sample2.java类找不到类?我坚持这个。

最佳答案

FindClass("cversion.xeger.Sample2");

这个调用是不正确的。请参阅文档。应该是

FindClass("cversion/xeger/Sample2");

关于java - 在 C++ 中使用 java 类时找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com