- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人知道是否有办法停止/重置 Java 应用程序与其 Jni 链接的 C++ 源之间的连接...?
我尝试通过调用对象的构造函数来重置该对象,但它不起作用......
MyJniJavaClass jni = new MyJniJavaClass();
---- MY ACTIONS ----
jni = new MyJniJavaClass();
---- OTHER ACTIONS ----
事实上,我的问题是我尝试访问我的 C++ DLL 两次。第一次还好,第二次就崩溃了……我尝试使用两个不同对象的实例访问 C++ DLL,但它仍然崩溃...
所以我认为问题是由于 C++ DLL 在我的应用程序内存中保持打开状态并且它不喜欢我访问它两次(“同时”)...
这是 C++ 代码:
////////////////// ADDED
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <math.h>
#include <XtremeAPI.h>
////////////////// ADDED
#include "MainFrame_Jni_Functions.h"
#include <vector>
#include <string>
#include <iostream>
using namespace std;
// parameters table columns and row number
vector<char*> paramName;
vector<char*> paramType;
jdouble* paramValue;
jdouble* paramMin;
jdouble* paramMax;
jdouble* paramRef;
jint paramNbRows;
// responses table columns and row number
vector<char*> respName;
jint respNbRows;
// objectives table columns and row number
vector<char*> objName;
vector<char*> objType;
jint objNbRows;
// constraints table columns and row number
vector<char*> conName;
vector<char*> conType;
jdouble* conLimit;
jdouble* conExponent;
jdouble* conRefVal;
jdouble* conWeight;
jint conNbRows;
// interval constraints table columns and row number
vector<char*> intConName;
vector<char*> intConType;
jdouble* intConLowLimit;
jdouble* intConUpLimit;
jdouble* intConExponent;
jdouble* intConWeight;
jint intConNbRows;
// Xtreme data's
//static XtremeDataGA xtremeDataGA;
/*XtremeDataFastGA xtremeDataFastGA;
XtremeDataMGA xtremeDataMGa;
XtremeDataFastGA xtremeDataFastGA;
XtremeDataFastMGA xtremeDataFastMGA;*/
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_sendParamToNative
( JNIEnv *env, jobject jobj, jobjectArray jparamName, jdoubleArray jparamValue,
jdoubleArray jparamMin, jdoubleArray jparamMax, jdoubleArray jparamRef, jobjectArray jparamType){
paramNbRows = env->GetArrayLength( jparamName );
paramValue = env->GetDoubleArrayElements(jparamValue, 0);
paramMin = env->GetDoubleArrayElements(jparamMin, 0);
paramMax = env->GetDoubleArrayElements(jparamMax, 0);
paramRef = env->GetDoubleArrayElements(jparamRef, 0);
paramName = vector<char*>(paramNbRows);
for(int i=0; i<paramNbRows; i++){
paramName.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jparamName, i), 0 );
}
paramType = vector<char*>(paramNbRows);
for(int i=0; i<paramNbRows; i++){
paramType.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jparamType, i), 0 );
}
env->ReleaseDoubleArrayElements(jparamValue,paramValue, 0);
env->ReleaseDoubleArrayElements(jparamMin, paramMin, 0);
env->ReleaseDoubleArrayElements(jparamMax, paramMax, 0);
env->ReleaseDoubleArrayElements(jparamRef, paramRef, 0);
}
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_sendRespToNative (JNIEnv *env, jobject jobj, jobjectArray jRespName){
respNbRows = env->GetArrayLength( jRespName );
respName = vector<char*>(respNbRows);
for(int i=0; i<respNbRows; i++){
respName.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jRespName, i), 0 );
}
}
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_sendObjToNative
(JNIEnv *env, jobject jobj, jobjectArray jObjName, jobjectArray jObjType){
objNbRows = env->GetArrayLength( jObjName );
objName = vector<char*>(objNbRows);
for(int i=0; i<objNbRows; i++){
objName.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jObjName, i), 0 );
}
objType = vector<char*>(objNbRows);
for(int i=0; i<objNbRows; i++){
objType.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jObjType, i), 0 );
}
}
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_sendConToNative
( JNIEnv *env, jobject jobj, jobjectArray jConName, jobjectArray jConType,
jdoubleArray jConLimit, jdoubleArray jConExpo, jdoubleArray jConRefVal, jdoubleArray jConWeight){
conNbRows = env->GetArrayLength( jConName );
conLimit = env->GetDoubleArrayElements(jConLimit, 0);
conExponent = env->GetDoubleArrayElements(jConExpo, 0);
conRefVal = env->GetDoubleArrayElements(jConRefVal, 0);
conWeight = env->GetDoubleArrayElements(jConWeight, 0);
conName = vector<char*>(conNbRows);
for(int i=0; i<conNbRows; i++){
conName.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jConName, i), 0 );
}
conType = vector<char*>(conNbRows);
for(int i=0; i<conNbRows; i++){
conType.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jConType, i), 0 );
}
env->ReleaseDoubleArrayElements(jConLimit, conLimit, 0);
env->ReleaseDoubleArrayElements(jConExpo, conExponent,0);
env->ReleaseDoubleArrayElements(jConRefVal, conRefVal, 0);
env->ReleaseDoubleArrayElements(jConWeight, conWeight, 0);
}
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_sendIntConToNative
( JNIEnv *env, jobject jobj, jobjectArray jIntConName, jobjectArray jIntConType,
jdoubleArray jIntConLowLimit, jdoubleArray jIntConUpLimit, jdoubleArray jIntConExp, jdoubleArray jIntConWeight){
intConNbRows = env->GetArrayLength( jIntConName );
intConLowLimit = env->GetDoubleArrayElements(jIntConLowLimit, 0);
intConUpLimit = env->GetDoubleArrayElements(jIntConUpLimit, 0);
intConExponent = env->GetDoubleArrayElements(jIntConExp, 0);
intConWeight = env->GetDoubleArrayElements(jIntConWeight, 0);
intConName = vector<char*>(intConNbRows);
for(int i=0; i<intConNbRows; i++){
intConName.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jIntConName, i), 0 );
}
intConType = vector<char*>(intConNbRows);
for(int i=0; i<intConNbRows; i++){
intConType.at(i) = (char*)env->GetStringUTFChars(
(jstring)env->GetObjectArrayElement( jIntConType, i), 0 );
}
env->ReleaseDoubleArrayElements(jIntConLowLimit,intConLowLimit, 0);
env->ReleaseDoubleArrayElements(jIntConUpLimit, intConUpLimit, 0);
env->ReleaseDoubleArrayElements(jIntConExp, intConExponent, 0);
env->ReleaseDoubleArrayElements(jIntConWeight, intConWeight, 0);
}
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_printTables (JNIEnv *env, jobject jobj){
cout << endl << "Printing from XtremeAPIProject" << endl;
cout << endl << "paramTable" << endl;
for(int i=0; i<paramNbRows; i++)
cout << "line " << i << " : "
<< " name=" << paramName.at(i)
<< " val=" << paramValue[i]
<< " min=" << paramMin[i]
<< " max=" << paramMax[i]
<< " ref=" << paramRef[i]
<< " type=" << paramType.at(i)
<< endl;
cout <<endl << "respTable" << endl;
for(int i=0; i<respNbRows; i++)
cout << "line " << i << " : "
<< " name=" << respName.at(i)
<< endl;
cout <<endl << "objTable" << endl;
for(int i=0; i<objNbRows; i++)
cout << "line " << i << " : "
<< " name=" << objName.at(i)
<< " type=" << objType.at(i)
<< endl;
cout <<endl << "conTable" << endl;
for(int i=0; i<conNbRows; i++)
cout << "line " << i << " : "
<< " name=" << conName.at(i)
<< " type=" << conType.at(i)
<< " limit="<< conLimit[i]
<< " exp=" << conExponent[i]
<< " refV=" << conRefVal[i]
<< " wght=" << conWeight[i]
<< endl;
cout <<endl << "intConTable" << endl;
for(int i=0; i<intConNbRows; i++)
cout << "line " << i << " : "
<< " name=" << intConName.at(i)
<< " type=" << intConType.at(i)
<< " lowL=" << intConLowLimit[i]
<< " uprL=" << intConUpLimit[i]
<< " exp=" << intConExponent[i]
<< " wght=" << intConWeight[i]
<< endl;
cout << endl << "-----------------------------------------------------------------------------" << endl;
return;
}
///////////////////////////////////////// test functions
// Test function
void rosenbrockFunction (std::vector<double>& parameterVector, std::vector<double>& responseVector)
{
double r = 0;
for (unsigned int i=0; i<parameterVector.size (); i++)
if ( (i+1)%2 == 1 )
r = r + pow(1.0E+00 - parameterVector.at (i), 2.0);
else
r = r + 100.0E+00 *
pow(parameterVector.at (i) - pow(parameterVector.at (i-1), 2.0), 2.0);
responseVector.at (0) = r;
}
// Test function
void zdt1Function (std::vector<double>& parameterVector, std::vector<double>& responseVector)
{
double nDouble = parameterVector.size ();
double f1 = parameterVector.at (0);
double g = 0.0;
for (unsigned int i=1; i<parameterVector.size (); i++)
g += parameterVector.at (i);
g = 9.0 * g / (nDouble - 1.0);
g += 1.0;
double h = 1.0 - sqrt (f1 / g);
responseVector.at (0) = f1;
responseVector.at (0) = g * h;
}
////////////////////////////////////////////////////////
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_runTestGA (JNIEnv *env, jobject jobj){
//testGA();
//xtremeDataGA = XtremeDataGA();
XtremeDataGA xtremeData = XtremeDataGA();
//--------------- [ Parameters ] ----------------------------------------------------
xtremeData.parameters.resize (2); //paramNbRows
for(int i=0; i<2; i++){ //paramNbRows
xtremeData.parameters.at(i).name = paramName.at(i);
xtremeData.parameters.at(i).valueMin = paramMin[i];
xtremeData.parameters.at(i).valueMax = paramMax[i];
xtremeData.parameters.at(i).valueRef = paramRef[i];
if (!strcmp(paramType.at(i), "Double"))
xtremeData.parameters.at(i).valueType = 3;
else if (!strcmp(paramType.at(i), "Integer"))
xtremeData.parameters.at(i).valueType = 2;
else if (!strcmp(paramType.at(i), "Boolean"))
xtremeData.parameters.at(i).valueType = 1;
else
xtremeData.parameters.at(i).valueType = 0;
}
//--------------- [ Responses ] -----------------------------------------------------
xtremeData.responses.resize (1);
xtremeData.responses.at(0).name = "F1";
//--------------- [ External simulation ] -------------------------------------------
xtremeData.externalSimulation.externalSimulationType = 1;
xtremeData.externalSimulation.functionPointer = &rosenbrockFunction;
//--------------- [ Objective function ] --------------------------------------------
xtremeData.penalties.resize (1);
xtremeData.penalties.at(0).quantityName = "F1";
xtremeData.penalties.at(0).penaltyType = "MINIMIZE";
xtremeData.penalties.at(0).weight = 1.0;
//--------------- [ Optimizer ] -----------------------------------------------------
xtremeData.optimizationData.initialSolutionStrategy = 0;
xtremeData.optimizationData.randomSeedStrategy = 0;
xtremeData.optimizationGAData.reproductionCount = 50;
xtremeData.optimizationGAData.individualCount = 50;
xtremeData.optimizationGAData.evaluationStrategy.first = 1;
xtremeData.optimizationGAData.evaluationStrategy.second = 1;
xtremeData.optimizationGAData.GAType = 1; // our advance GA
xtremeData.optimizationData.solutionHistoryStrategy = 1;
bool success = XtremeAPIGA (xtremeData);
cout << endl << "success=" << success << endl;
cout << "nb1=" << xtremeData.resultsData.parameter.size() << endl;
cout << "nb2=" << xtremeData.resultsData.parameter.at(0).size() << endl;
cout << "nb3=" << xtremeData.resultsData.parameter.at(0).at(0).size() << endl;
/////////////////////////////////////////////////////////////////////////////////
cout << "begin!!!!!!!!!!!!!!" << endl;
cout << "before!!!!!!!!!!!!!!" << endl;
jclass jclazz = env->FindClass("MainFrame/Jni/TablesObjects");
cout << "after***************" << jclazz <<endl;
int iterationsSize = xtremeData.resultsData.parameter.size();
jdouble* jdbl = new jdouble(iterationsSize);
for(int i=0; i<iterationsSize; i++)
jdbl[i] = xtremeData.resultsData.parameter.at(i).at(0).at(0);
jdoubleArray jdblArr = env->NewDoubleArray(iterationsSize);
env->SetDoubleArrayRegion(jdblArr, 0, iterationsSize, jdbl);
jclass jStringClass = env->FindClass("java/lang/String");
jobjectArray jStringArray = env->NewObjectArray(6, jStringClass, 0);
for(int i=0; i<6; i++)
env->SetObjectArrayElement(jStringArray, i, env->NewStringUTF("a") );
jmethodID mid = env->GetStaticMethodID(jclazz, "resultsParameterInsertCol", "([Ljava/lang/Object;[D)V");
env->CallStaticVoidMethod(jclazz, mid, jStringArray, jdblArr);
cout << "end!!!!!!!!!!!!!!" << endl;
}
JNIEXPORT void JNICALL Java_MainFrame_Jni_Functions_destroyAll (JNIEnv *env, jobject jobj){
// parameters table columns and row number
paramName;
paramType;
paramValue = NULL;
paramMin = NULL;
paramMax = NULL;
paramRef = NULL;
paramNbRows;
// responses table columns and row number
respName;
respNbRows = NULL;
// objectives table columns and row number
objName;
objType;
objNbRows = NULL;
// constraints table columns and row number
conName;
conType;
conLimit = NULL;
conExponent = NULL;
conRefVal = NULL;
conWeight = NULL;
conNbRows = NULL;
// interval constraints table columns and row number
intConName;
intConType;
intConLowLimit = NULL;
intConUpLimit = NULL;
intConExponent = NULL;
intConWeight = NULL;
intConNbRows = NULL;
}
最佳答案
所有 native 库都会加载到 ClassLoader 的静态映射中,因此您不能简单地在一个 JVM 中重新加载 native 库。如何弄清楚如何使用这些东西,您可以查看 DLL 的接口(interface),它应该包含诸如 destroy、destroyN 方法之类的内容,以便库可以自行完成其资源。
关于java - 关闭/清除 Jni 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8293198/
我知道这个问题可能已经被问过,但我检查了所有这些,我认为我的情况有所不同(请友善)。所以我有两个数据集,第一个是测试数据集,第二个是我保存在数据框中的预测(预测值,这就是没有数据列的原因)。我想合并两
在 .loc 方法的帮助下,我根据同一数据框中另一列中的值来识别 Panda 数据框中某一列中的值。 下面给出了代码片段供您引用: var1 = output_df['Player'].loc[out
当我在 Windows 中使用 WinSCP 通过 Ubuntu 连接到 VMware 时,它提示: The server rejected SFTP connection, but it lis
我正在开发一个使用 xml web 服务的 android 应用程序。在 wi-fi 网络中连接时工作正常,但在 3G 网络中连接时失败(未找到 http 404)。 这不仅仅发生在设备中。为了进行测
我有一个XIB包含我的控件的文件,加载到 Interface Builder(Snow Leopard 上的 Xcode 4.0.2)中。 文件的所有者被设置为 someClassController
我在本地计算机上管理 MySQL 数据库,并通过运行以下程序通过 C 连接到它: #include #include #include int main(int argc, char** arg
我不知道为什么每次有人访问我网站上的页面时,都会打开一个与数据库的新连接。最终我到达了大约 300 并收到错误并且页面不再加载。我认为它应该工作的方式是,我将 maxIdle 设置为 30,这意味着
希望清理 NMEA GPS 中的 .txt 文件。我当前的代码如下。 deletes = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ] searchquer
我有一个 URL、一个用户名和一个密码。我想在 C# .Net WinForms 中建立 VPN 连接。 你能告诉我从哪里开始吗?任何第三方 API? 代码示例将受到高度赞赏... 最佳答案 您可以像
有没有更好的方法将字符串 vector 转换为字符 vector ,字符串之间的终止符为零。 因此,如果我有一个包含以下字符串的 vector "test","my","string",那么我想接收一
我正在编写一个库,它不断检查 android 设备的连接,并在设备连接、断开连接或互联网连接变慢时给出回调。 https://github.com/muddassir235/connection_ch
我的操作系统:Centos 7 + CLOUDLINUX 7.7当我尝试从服务器登录Mysql时 [root@server3 ~]# Mysql -u root -h localhost -P 330
我收到错误:Puma 发现此错误:无法打开到本地主机的 TCP 连接:9200(连接被拒绝 - 连接(2)用于“本地主机”端口 9200)(Faraday::ConnectionFailed)在我的
请给我一些解决以下错误的方法。 这是一个聊天应用....代码和错误如下:: conversations_controller.rb def create if Conversation.bet
我想将两个单元格中的数据连接到一个单元格中。我还想只组合那些具有相同 ID 的单元格。 任务 ID 名称 4355.2 参与者 4355.2 领袖 4462.1 在线 4462.1 快速 4597.1
我经常需要连接 TSQL 中的字段... 使用“+”运算符时 TSQL 强制您处理的两个问题是 Data Type Precedence和 NULL 值。 使用数据类型优先级,问题是转换错误。 1)
有没有在 iPad 或 iPhone 应用程序中使用 Facebook 连接。 这个想法是登录这个应用程序,然后能够看到我的哪些 facebook 用户也在使用该应用程序及其功能。 最佳答案 是的。
我在连接或打印字符串时遇到了一个奇怪的问题。我有一个 char * ,可以将其设置为字符串文字的几个值之一。 char *myStrLiteral = NULL; ... if(blah) myS
对于以下数据 - let $x := "Yahooooo !!!! Select one number - " let $y := 1 2 3 4 5 6 7 我想得到
我正在看 UDEMY for perl 的培训视频,但是视频不清晰,看起来有错误。 培训展示了如何使用以下示例连接 2 个字符串: #!usr/bin/perl print $str = "Hi";
我是一名优秀的程序员,十分优秀!