Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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
如何在Maven项目中从C运行java类文件_Java_C_Maven_Java Native Interface_Beagleboard - Fatal编程技术网

如何在Maven项目中从C运行java类文件

如何在Maven项目中从C运行java类文件,java,c,maven,java-native-interface,beagleboard,Java,C,Maven,Java Native Interface,Beagleboard,我在Maven项目中有一个WebApp WAR文件,运行良好 我想从C文件调用maven项目中的类文件中的Java方法。C程序读取我的beagleboard的GPIO输入,当它打开时,它运行Java方法。我使用JNI来做这件事 我可以运行一个经典的HelloWorldJava方法,但是当我想从Maven项目中运行一个方法时,我的JVM在尝试加载Java静态方法时出现了一个致命错误 我在我的WebApp中,在/WEB-INF/myapp/classes/classfile中添加了C代码/ 类文件:

我在Maven项目中有一个WebApp WAR文件,运行良好

我想从C文件调用maven项目中的类文件中的Java方法。C程序读取我的beagleboard的GPIO输入,当它打开时,它运行Java方法。我使用JNI来做这件事

我可以运行一个经典的HelloWorldJava方法,但是当我想从Maven项目中运行一个方法时,我的JVM在尝试加载Java静态方法时出现了一个致命错误

我在我的WebApp中,在/WEB-INF/myapp/classes/classfile中添加了C代码/

类文件:应用程序 方法:试验

我的C程序:

JNIEnv* create_vm(JavaVM ** jvm) {

    JNIEnv *env;
    JavaVMInitArgs vm_args;
    JavaVMOption options;
    //Path to the java source code
    options.optionString = "-Djava.class.path=./";
    //JDK version. This indicates version 1.6
    vm_args.version = JNI_VERSION_1_6;
    vm_args.nOptions = 1;
    vm_args.options = &options;
    vm_args.ignoreUnrecognized = 0;

    int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args);
    if(ret < 0)
        printf("\nUnable to Launch JVM\n");
    return env;
}


int main(int argc, char** argv)
{
    int fd, ret, data[64];
    JNIEnv *env;
    JavaVM * jvm;
    env = create_vm(&jvm);
    if (env == NULL)
        return 1;

    fd = ret = open(argv[argc - 1], O_RDONLY);
    printf("open returned %d\n", ret);
    while (1) {
        ret = read(fd, &data, sizeof(data));
        printf("read returned %d\n", ret);
        jclass helloWorldClass = (*env)->FindClass(env, "App");
        printf("appel class\n");
        jmethodID mainMethod = (*env)->GetStaticMethodID(
            env, helloWorldClass, "test", "([Ljava/lang/String;)V");
        printf("appel method\n");
        (*env)->CallStaticVoidMethod(env, helloWorldClass, mainMethod, NULL);

        sleep(2);
    }
    (*jvm)->DestroyJavaVM(jvm);
    exit(0);
}
你调查过使用吗

我注意到您有以下行:

options.optionString=-Djava.class.path=.///java源代码的路径

类路径需要指向Maven生成的jar文件,或者指向Java类文件所在的根目录

见:

在标准的Maven项目中,当您执行mvn包时,Maven将在target/下创建您的jar。因此,您可能会将-Djava.class.path=./更改为-cp/target/App.jar

您是否研究过使用它

我注意到您有以下行:

options.optionString=-Djava.class.path=.///java源代码的路径

类路径需要指向Maven生成的jar文件,或者指向Java类文件所在的根目录

见:


在标准的Maven项目中,当您执行mvn包时,Maven将在target/下创建您的jar。因此,您可能会将-Djava.class.path=./更改为-cp/target/App.jar

+1用于beagleboard-您应该添加该标记,顺便说一句。+1用于beagleboard-您应该添加该标记,顺便说一句。反向JNI是我使用的。但是我不能运行Maven项目中的java应用程序:/Reverse JNI是我使用的。但我无法运行Maven项目中的java应用程序:/
package App;
public class App 
{
   public static void test (String[] args){
        System.out.println("Hello World");
   }
}