Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI使用依赖项加载jar_Java_C++_Java Native Interface_Jnienv - Fatal编程技术网

Java JNI使用依赖项加载jar

Java JNI使用依赖项加载jar,java,c++,java-native-interface,jnienv,Java,C++,Java Native Interface,Jnienv,我尝试用JNI:< /P>在我的C++程序中加载下面的java类 package helloWorld; import org.apache.log4j.Logger; public class HelloWorld{ private static final Logger logger = Logger.getLogger(HelloWorld.class); public static void main(String[] args){ System.

我尝试用JNI:< /P>在我的C++程序中加载下面的java类
package helloWorld;

import org.apache.log4j.Logger;

public class HelloWorld{

    private static final Logger logger = Logger.getLogger(HelloWorld.class);

    public static void main(String[] args){
        System.out.println("Hello, World");
    }
    public static int square(int input){
        int output = input * input;
        return output;
    }
    public static int power(int input, int exponent){
        int output,i;
        output=1;
        for(i=0;i<exponent;i++){
            output *= input;
        }
        return output;
    }
}
包helloWorld;
导入org.apache.log4j.Logger;
公共类HelloWorld{
私有静态最终记录器=Logger.getLogger(HelloWorld.class);
公共静态void main(字符串[]args){
System.out.println(“你好,世界”);
}
公共静态整数平方(整数输入){
int输出=输入*输入;
返回输出;
}
公共静态整数幂(整数输入,整数指数){
int输出,i;
输出=1;
对于(i=0;iFindClass(“helloWorld/helloWorld”);
if(hello\u world\u class==NULL){
如果(环境->例外发生()){
环境->例外描述();
}
printf(“未找到类”);
}
否则{
main_method=env->GetStaticMethodID(hello_world_class,“main”,“([Ljava/lang/String;)V”);
square\u method=env->GetStaticMethodID(hello\u world\u class,“square”,“I)I”);
power\u method=env->GetStaticMethodID(hello\u world\u class,“power”,“II)I”);
env->CallStaticVoidMethod(hello\u world\u类,main\u方法,NULL);
printf(“%d平方是%d\n”),数字,
env->CallStaticIntMethod(hello_world_类,square_方法,number));
printf(“%d升到%d次幂为%d\n”),数字,指数,
env->CallStaticIntMethod(hello_world_class,power_method,number,index));
}
}
int main(int argc,字符**argv)
{
JavaVM*jvm;
JNIEnv*env;
env=创建虚拟机(&jvm);
if(env==NULL)
返回1;
调用_类(env);
系统(“暂停”);
返回0;
}
我把HeloRoL.dJar放在C++应用程序的根文件夹中。当它试图加载HeloLoWorl类时,抛出以下的执行:

java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at helloWorld.HelloWorld.<clinit>(HelloWorld.java:7)
java.lang.NoClassDefFoundError:org/apache/log4j/Logger
在helloWorld.helloWorld。(helloWorld.java:7)
JNI找不到log4j依赖项,因为它不在HelloWorld.jar内。我曾尝试将它放在lib文件夹中以及HelloWorld.jar所在的同一文件夹中,但它不起作用。我需要将log4j.jar放在何处,以便JNI可以对其进行重新初始化并加载


非常感谢,我是jni的新手,所以请明确回答。我一整天都在犯这个错误。T.T

你所要做的就是在选项中传递
JAR
文件的位置。你可以这样做:

options[0].optionString = "-Djava.class.path=./target:../target:./jar:./jar/log4j-api-2.12.1.jar:./jar/log4j-core-2.12.1.jar";
请记住,您可能还需要
log4j2.xml
(在
log4j-2.12.1
的情况下)。要确保您的配置文件是可发现的,请将目录(以及该文件)添加到类路径中


这里可以找到完整的示例代码:

如果是C++代码,为什么要标记C?抱歉,删除了标记。你已经明确地指定了类的部分;为什么不列出两个代码< jar > <代码> s?@ alANSTOKES,你是说用Log4J jar路径声明另一个类路径?但是JNI知道它是HeloRoL.D.jar的依赖吗?我会怎么链接?它作为对HelloWorld的依赖关系?
-Djava.class.path=foo.jar;baz.jar
(或者使用:not;在Linux上)。它不关心依赖关系,只想知道在哪里根据需要查找每个类。
options[0].optionString = "-Djava.class.path=./target:../target:./jar:./jar/log4j-api-2.12.1.jar:./jar/log4j-core-2.12.1.jar";