草庐IT

java - JNI_CreateJavaVM() 每次我运行我的应用程序时都会失败(确切地说)

我有一个WindowsMFC应用程序:(1)加载JVM(JNI_CreateJavaVM())(2)将主线程附加到JVM(AttachCurrentThread())(3)加载一些Java类和方法(FindClass()和GetMethodID()/GetStaticMethodID())(4)注册一些本地回调以供Java代码使用(RegisterNatives())(5)从JVM中分离线程(DetachCurrentThread())(6)销毁JVM(DestroyJavaVM())所有上述功能每隔一段时间我运行该应用程序。我知道它们成功了,因为除了上述之外,我与应用程序交互并成功调

项目配置vue.config jsconfig babel.config .prettierc .env .eslintrc

.env在一个产品的前端开发过程中,一般来说会经历本地开发、测试脚本、开发自测、测试环境、预上线环境,然后才能正式的发布。对应每一个环境可能都会有所差异,比如说服务器地址、接口地址、websorket地址……等等。在各个环境切换的时候,就需要不同的配置参数,所以就可以用环境变量和模式,来方便我们管理。 在根目录添加.env文件,配置所有情况下都会用到的配置.env.production对应生产环境.env.development对应开发环境.env.[model]用户创建的环境        npmrundev(serve):其实是运行了vue-cliserviceserve,默认模式为 de

java - 使用 Java JNI 时是否可以调试核心转储?

我的应用程序主要是Java,但对于某些计算,使用C++库。我们的环境是在RedHat3(即将成为RedHat5)上运行的Java1.6。我的问题是C++库不是线程安全的。为了解决这个问题,我们运行多个单线程“工作”进程,并从同样用C++编写的中央工作管理器为它们分配工作。我们的Java应用程序通过第三方产品调用C++工作管理器。由于各种原因,我们想重写C++WorkManager和workers。我赞成全部用Java编写,在每个worker中使用JNI来调用C++库。主要问题是如果C++库核心转储会发生什么。不幸的是,这很常见,我们需要能够看到C++库中的哪一行导致了问题,例如通过检查

java - 如何用IntelliJ IDEA创建jni头文件

我想在IntelliJIDEA中创建头文件。这是我的做法:文件>设置>工具>外部工具然后我点击+,指定标题并设置参数如下:程序:C:\ProgramFiles\Java\jdk1.8.0_25\bin参数:-dC:\Users\Administrator\Documents\VisualStudio2013\Projects\JniExampleLibrary-jniExample.JniExample工作目录:C:\ProgramFiles\Java\jdk1.8.0_25\bin但是点击ok之后,上面用-d定义的路径下没有JniExample.h文件你能告诉我它有什么问题吗?提前致

android - JNI 保持对对象的全局引用,使用其他 JNI 方法访问它。在多个 JNI 调用中保持 C++ 对象存活

我刚开始使用JNI,但遇到以下问题。我有一个包含简单类的C++库。我从JavaAndroid项目中调用了三个JNI方法,分别实例化所述类、调用实例化类的方法并销毁它。我保留了对该对象的全局引用,因此我可以在其他两个JNI方法中使用它。我怀疑我做不到。当我运行该应用程序时,出现运行时错误(使用过时的引用),我怀疑这是因为全局引用在后续调用其他JNI方法时无效。是实现我想要的(让对象在多个JNI调用中存在)的唯一方法,实际上将指向实例化类的指针传回Java,将其保留在那里,然后将其传回JNI功能?如果是这样,那很好,我想确保我不能用全局引用来做到这一点,而且我不仅仅是遗漏了什么。我已经阅读

java - 强制 Java 调用我的 C++ 析构函数 (JNI)

我以为这个问题以前会有人问过,但是我在这里找不到...我使用SWIG围绕C++类创建了一个JNI包装器。一切都很好,除了Java似乎从未调用类的finalize(),因此,反过来,我的类的析构函数永远不会被调用。该类的析构函数执行一些最终文件I/O,因此不幸的是,这不仅仅是轻微的内存泄漏。Google了一下,似乎没有办法强制JavaGC并销毁一个对象。真的吗?我知道我可以操纵我的SWIG文件并创建一个调用C++析构函数的java函数,但是这个类被多种不同平台/语言的最终用户使用,所以添加一个Java-only会造成不一致我们的技术作家不会喜欢的。 最佳答案

【错误记录】安装 Hadoop 运行环境报错 ( Error: JAVA_HOME is incorrectly set. Please update xxx\hadoop-env.cmd )

文章目录一、报错信息二、问题分析三、解决方案总结:报错:Error:JAVA_HOMEisincorrectlyset.Pleaseupdatexxx\hadoop-env.cmdJDK安装在了C:\ProgramFiles\目录下,安装目录ProgramFiles有空格,太坑了;换一个没有空格的JDK目录;一、报错信息安装Hadoop运行环境,完成上述安装步骤后,运行hadoop命令报错;C:\Windows\system32>hadoop-versionThesystemcannotfindthepathspecified.Error:JAVA_HOMEisincorrectlyset. 

java - 如何在 JNI 环境的 native 端正确同步线程?

问题简介我通过JNI在一个进程中使用C++和Java。对于有问题的用例,C++线程和Java线程都在访问相同的数据,它们是在C++端这样做的,我想正确同步访问。到目前为止,我几乎所有的JNI线程同步都在Java端,答案很明显:使用提供的Java并发包和内置的并发语言功能。不幸的是,答案在C++方面并不是那么明显。到目前为止我尝试过的内容简介我尝试使用pthreads互斥锁,认为即使我没有使用pthreads来创建线程它也可以工作,但是在尝试锁定时偶尔会卡住-我将在下面进一步展示一个示例。问题详情在我目前的特定用法中,c++正在轮询Java提供的更改,以1秒计时器(不是我想要的,但我不确

android - JNI 错误(应用程序错误): local reference table overflow (max=512)

我正在尝试运行LibSVMAndroidClassification带有我自己的数据集的Android项目。它与已经提供的数据集一起工作得很好,当我使用我的csv100行(小于原始大小的1%)时它也工作得很好。但是当我尝试使用例如1000行的“TrainCSV”时,我看到了这个错误。我什至尝试在Manifest.xml中设置android:largeHeap="true"但没有任何改进。这是我的logcat转储。10-3117:49:06.745:E/dalvikvm(2008):JNIERROR(appbug):localreferencetableoverflow(max=512)

JNI如何在内存级别工作

我有一个Java文件,该文件加载.so文件并打印来自.so文件的结果。我的.SO文件没有源代码。任何人都可以告诉内存结构中的结果如何加载结果,以及该Java类正在读取.SO生成的结果并将其打印出来?看答案如果您有任何已经用母语编写的代码,并且不愿更改它,但是您希望在Java代码中使用本机呼叫,而不是完全重写所有Java。JNI派上用场。它将您所有特定平台的实现转换为“独立平台”。标准库中的性能和平台敏感的API实现允许所有Java应用程序访问此功能。库文件.SO以这样的方式转换。JNIENV包含从本机数据类型到Java数据类型的所有类型的转换。它还支持适合本机方法呼叫的合适实现,JVM还处理信