草庐IT

hello-jni

全部标签

java 。 JNI。 jvm.dll

我有VisualStudioC++项目,它必须调用一些java功能。我打算使用JNI。我已经指定了额外的包含目录:C:\ProgramFiles(x86)\Java\jdk1.7.0_10\includeC:\ProgramFiles(x86)\Java\jdk1.7.0_10\include\win32和额外的库目录C:\ProgramFiles(x86)\Java\jdk1.7.0_10\lib并且能够编译所需的代码。但由于下一个错误,我仍然无法运行它:程序无法启动,因为缺少jvm.dll...我想,最简单的方法就是将dll复制到项目目录中。但我不知道是哪一个。例如,我发现其中有几

java - 最近的 Ubuntu 16.04 中的 JNI_CreateJavaVM() 堆栈损坏

几周以来,SWI-PrologJava接口(interface)在JNI_CreateJavaVM中立即崩溃。好吧,在大多数机器上。它在我的一台机器上运行良好,它运行相同版本的Ubuntu和openjdk...我将其简化为这个小程序:#include#include#includestaticJavaVM*jvm;intmain(intargc,char**argv){JavaVMInitArgsvm_args={0};JNIEnv*env;JavaVMOptionopt[8]={0};intoptn=0;intr;opt[optn++].optionString="-Djava.cl

java - 我可以在 Java Applet 中使用 JNI 吗?

Applets可以使用JNI(JavaNativeInterface)吗,有没有人试过? 最佳答案 您可以从小程序使用JNI,请记住小程序在客户端上运行,因此JNI将访问客户端以获取“NI”部分。 关于java-我可以在JavaApplet中使用JNI吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4366382/

java - 在 Java 7 上运行带有 JNI 的 Java 5/6 会给出堆栈防护警告

使用1.5(或打开1.5比较模式的1.6)构建的java程序给出此警告:JavaHotSpot(TM)ServerVMwarning:Youhaveloadedlibrarymynativelib.sowhichmighthavedisabledstackguard.TheVMwilltrytofixthestackguardnow.It'shighlyrecommendedthatyoufixthelibrarywith'execstack-c',orlinkitwith'-znoexecstack'.它似乎不会造成问题,但显然对我们的客户来说看起来有点可怕。我不认为在7中构建Jav

java - JNI GetMethodID 不适用于内部类的构造函数

我有一个带有私有(private)子类的类。我想在JNI包装器中创建该子类的实例并将其返回。我用谷歌搜索并试图让它工作但没有成功(methodID为空)。有什么建议吗?JNIEXPORTjobjectJNICALLJava_some_Class_some_Jni_Method(JNIEnv*env,jobjectthis){jclasscls=(*env)->FindClass(env,"someClass$someSubclass");if(cls==NULL)printf("jclasserror.");jmethodIDmethodID=(*env)->GetMethodID(e

java - 如何使用 JNI 或 JNA 读取窗口标题?

希望回到发展空间;主要使用Java调用一些nativewin32函数(我不想在.NET中构建)...有人可以指点我可以使用Java(JNI/JNA/SWIG)从不同的运行窗口读取标题的地方吗?假设您知道您尝试Hook的应用程序在内存空间中的哪个位置。 最佳答案 在JNA中:publicinterfaceUser32extendsStdCallLibrary{User32INSTANCE=(User32)Native.loadLibrary("user32",User32.class);intGetWindowTextA(Pointe

java - JNI 的意义何在?

我是Java的新手,被告知要使用Javanative接口(interface)来运行我用C编写的一些代码。现在,这可能是一个愚蠢的问题,但是JNI有什么意义呢?我不能简单地从JavaUI程序执行我的进程并获取其标准输出进行解析吗?此外,我了解到使用JNI可能会导致安全问题。这些问题是否直接取决于调用代码的质量?或者这是更深层次的东西?谢谢。 最佳答案 what'sthepointoftheJNI?它使您能够在同一进程中混合使用C和Java代码。Can'tIsimplyexecutemyprocessfromaJavaUIprogra

java - 哪些 VM 或 GC 支持 JNI 固定?

GetArrayElements函数族被记录为复制数组或将它们固定到位(并且这样做可以防止压缩垃圾收集器移动它们)。它被记录为比GetPrimitiveArrayCritical更安全、限制更少的替代方案.但是,我想知道哪些VM和/或垃圾收集器(如果有的话)实际固定数组而不是复制它们。 最佳答案 较旧的IBMJVM已固定(1.4及更早版本-即:不是当前的IBMJ9JVM),但从那时起,它们就没有了。一般来说,JVM不喜欢固定,因为它确实会扰乱复制垃圾收集器,而这正是当今大多数生产JVM所做的事情。我不是100%最新的(即:最新的Ja

java - 可以让 JNI 支持类路径中的通配符扩展吗?

我有一个通过JNI调用Java的C二进制文件。我将CLASSPATH设置为somedir/*以获取somedir中的所有jar。当我运行二进制文件时,找不到所需的类定义。当我运行时javathat.class's.name从同一个命令行,成功找到类。如果我明确地将somedir/中的所有jar添加到类路径,一切都很好,但这会导致非常长的类路径,我想避免。通过JNI执行的JVM是否支持类路径的通配符扩展?能做到吗? 最佳答案 我通过阅读热点源码找到了答案。只有通过CLASSPATH或-cp/-classpath传递的路径才能进行通配符

java - 如何通过 JNI 将 HashMap 从 Java 发送到 C

我有一个Object,它有一个HashMap字段。当Object传递给C时,我如何访问该字段?Object的Class具有以下字段:privateStringhello;privateMapparams=newHashMap(); 最佳答案 您问题的答案实际上归结为为什么您要传递一个Map到C而不是迭代你的Map在Java中并将内容传递给C。但是,我有什么资格质疑为什么?你问如何访问HashMap(在您提供的代码中,Map)字段?用Java为它编写一个访问器方法,并在传递容器时从C调用该访问器方法Object.下面是一些简单的示例代