jni相关内容
我有一个C库,需要临时缓冲区用于临时空间。我正在考虑将直接字节缓冲区的地址传递给它。 是否允许VM在最终释放之前重新定位缓冲区? 在JNI帧消失后,本机库将保持指针。我的理解是无法缓存JNI本地对象引用,因为VM可能在GC期间重定位它们。这是否适用于缓冲区地址? 我知道如果我在Java中分配缓冲区然后让缓冲区对象熄灭,VM将释放缓冲区内存范围。如果我使用NewDirectByteBu
..
我正在成功运行一个C ++应用程序,该应用程序使用JAR文件作为类路径参数加载JVM。然后,应用程序成功使用JNI调用来执行此JAR文件中.class文件中定义的各种函数。 包含在.jar文件的目录结构中的是第三方集.class文件 - 从jai_imageio.jar合并的文件(这些.class文件及其完整目录结构,使用Intellij IDEA合并到此单个.jar文件中)。合并的.jar
..
我有一个与一组第三方库交互的JNI库,系统上可能有多个版本的第三方库。对于第三方库的每个版本,出于可比性原因,我必须重新编译JNI代码。现在我通过加载具有特定名称的DLL来处理这个问题,如果版本更改,我更改了JNI接口DLL的名称,以便正确的版本具有正确的名称来加载。 我希望能够根据用户想要使用的版本动态加载dll。如果我在具有不同名称但具有相同方法签名的DLL上调用System.loadL
..
我可以使用 java.nio 读取/编写带有Java的linux块设备。以下代码有效: Path fp = FileSystems.getDefault()。getPath(“/ dev”,“sdb”); FileChannel fc = null; try { fc = FileChannel.open(fp,EnumSet.of(StandardOpenOption.READ
..
我已经成为一名Java开发人员已有几年了,并且听说过你可以用JNI做一些非常有用和强大的东西。我不知道我是不是需要使用它,或者它与我的关系不是很相关;但我根本没有碰过它。 我想知道Java这方面的用处是什么。例子很棒。 解决方案 这非常有用。我可以看到使用JNI的两个主要原因(可能更多)。 性能。如果您有一段代码,其中Java Runtime无论出于何种原因都无法降低性能。您可
..
我正在尝试将C ++ std :: string转换为jstring并返回它。这很容易 JNIEnv * - > NewStringUTF(stdString.c_str()) 但问题是我正在转换的字符串几乎随机散布了空字符。这是 c_str()的问题,但不是 std :: string 。 NewStringUTF 只会捕获完整 std :: string 的一部分。
..
在尝试使用我的实际代码之前,我试图让JNI正常工作,但是在我从C ++编译DLL并运行我的Java应用程序后,我得到: 线程“main”中的异常java.lang.UnsatisfiedLinkError: \ workspace\JNI test \\\ ative\jnitest.dll:%1不是有效的Win32应用程序 at java.lang.ClassLoader
..
我在头文件中得到了c ++结构, struct StatusLine { static jclass Class; // Lorg / apache / http / StatusLine; static jmethodID GetStatusCode; //()I }; struct ByteArrayOutputStream { static jclass C
..
我正在尝试从C ++调用Java函数。 这是我到目前为止的代码: #include typedef struct JavaVMCreationResult { JavaVM * jvm; JNIEnv * env; } JVMCreationResult; JVMCreationResult * CreateJavaVM(){ JavaVM *
..
我正在寻找使外部应用程序(不是像notepad或calc.exe这样的Windows应用程序)的解决方案,以便在按下Java GUI中的按钮后始终保持在顶部。 我在C ++中使用这段代码来获取桌面上所有打开的窗口,并将它们的进程ID(PID)与发送的PID(来自我的Java应用程序)相匹配: #include“cjni.h” #include #include
..
我的java代码将调用存在的c ++代码来解析文件。它会生成一个保存很多数据的对象。 我将调用jni的第二种方法来访问这些数据, 当我调用第二种方法时,我必须再次解析文件。这显然是正确的行为。 有没有办法解决这个问题? BTW:我刚接触c ++。 解决方案 我不确定我是否理解你的问题是正确的。但我想你想要做的是在多个jni调用上保持某种c ++对象的存活。 你可以做多件事
..
我正在研究HotSpot在JNI代码运行时如何执行垃圾收集和/或堆压缩。 似乎是常识可以随时在Java中移动对象。我试图明白,如果JNI受到垃圾收集效果的影响。存在许多JNI函数来明确地防止垃圾收集;例如 GetPrimitiveArrayCritical 。如果引用确实是volatile,那么这样的函数是有意义的。但是,如果不是这样的话就毫无意义。 关于这个问题,似乎存在大量相互矛盾
..
ArrayList myArraylist; public ArrayList getData(){ myArraylist = new ArrayList(); myArraylist.add(“1267982563”); myArraylist.add(“2345678”); myArraylist.add(“543
..
在我的项目中,我想使用eclipse调试OpenJDK版本8的C / C ++源代码。为了这个目的,我已经做了以下内容: 编译的OpenJDK8与 - 与调试级别= slowdebug 使用此自述 进口源生成文件项目变成蚀 创建了一个Eclipse运行配置,执行对已编译的OpenJDK的java.exe的GDB和靶向示例java程序。在这个配置中我附加了JDK源代码目录路径,这样ecli
..
你有没有听说过带有Java包装的Windows虚拟操纵杆? 我正在尝试PPJOY,它运行良好,但后来我需要使用JNI从Java开始工作,暂时看起来并不容易。 谢谢! 解决方案 你有。我为PPJoy制作了一个Java包装器。它真的很容易使用。请参阅: 尝试{ / * *尝试创建新的操纵杆。 * / 操纵杆操纵杆=新操纵杆(); 尝试{ / * *设置
..
我是JNI的新手,这是我第一个尝试从C ++调用Java代码的程序。我正在使用Qt 5.2而且我正在编写一个Android应用程序。 我无法找到我的java类并将其加载到我的C ++程序中。我已经在堆栈溢出和其他地方阅读了很多帖子,这似乎是一个常见的问题,但我还没能解决我的问题.. 我也不确定Java VM是否已正确设置,因为QAndroidJniEnvironment上的Qt文档很少
..
HANDLE hFile = CreateFileA(“C:\\ myfile.zip”,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); const int size = GetFileSize(hFile,NULL); char * buffer = new char [size]; DWORD读取;
..
我正在编写一个通过JNI接口使用C ++库的Java应用程序。 C ++库创建类型为 Foo 的对象,这些对象通过JNI正式传递给Java。 假设库有输出函数 void Foo :: print(std :: ostream& os) 我有一个Java OutputStream out 。如何从Java调用 Foo :: print ,以便输出显示在 out ?有没
..
我正在尝试编译以下项目: https://github.com/entropia/libsocket-can- java 我总是收到此错误消息?有谁知道如何解决它,它可能是Linux上的JDK 1.8.0.11(x64 Debian Wheezy)中的错误吗? 2:0, 。从JNI / cansocket.cpp:23: /opt/jdk1.8.0_11/in
..
我正在尝试按照以下指南使用LAME库在Android中实现MP3编码: Lame MP3编码器为Android编译 http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on-Android-with-JNI 但是我得到了一个java.lang.UnsatisfiedLinkError
..