二维浮点java_实例化一个自定义Java对象,在PLACEHOLDER FOR CODE 0代码上设置一个二维字符串和浮点向量...

我需要将一个回调传递给一个自定义对象中的java代码。这是我想从C++代码编写的自定义类。

public class Result {

private String utterance[][];

private float confidence[][];

public String[][] getUtterance() {

return utterance;

}

public float[][] getConfidence() {

return confidence;

}

public void setUtterance(String utterance[][]) {

this.utterance = utterance;

}

public void setConfidence(float confidence[][]) {

this.confidence = confidence;

}

}班级识别器与JNI进行通信。所以,这个回调给她。

public class Recognizer {

private Result result;

Recognizer(){

System.load(LibNameLoader.libRoot(jarLibPath);

}

...

private void newResultCallback(Result result){//C++ send this object to java

this.result = result;

}

}现在,这是我的C++代码,它与我的C++对象一起提供,与我想要的java相同。记住这是一个回调,我不能改变签名。

void Recognized(RecoResult *result){

//class package

jclass cls = env->FindClass("Lbr/ufpa/laps/jlapsapi/recognizer/Result;");

jobject theObject; //i don't how to manipulate this one and set it arrays

int row = result->sentenceNumber; //Vertical array lenght

int column = result->wordsNumber; //Horizontal array lenght

string *ptrUtterance = result->getUtterancePtr(); //simple acess ptrUtterance[i][j]

float *ptrConfidence = result->getConfidencePtr(); // " " ptrconfidence[i][j]

jstring utteranceArray[row][column];

jfloat floatArray[row][column];

env->CallVoidMethod(obj_, midU, theObject);

//obj_ is global and has the reference to java Recognizer class

//midU is the reference to java method called

//theObject is the object that java will receive

}我只需要帮助设置object内的数组字段。或者我可以使用此方法发送jstring和jfloat数组env-> CallVoidMethod(obj_,midU1,jstringArray);和env-> CallVoidMethod(obj_,midU2,jfloatArray);

感谢帮助!

编辑!

识别器就是这样,我首先尝试一个单维数组

...

jclass testecls;

jmethodID testemtdid;

jobject testeobj;

jstring testestr;

jobjectArray testearray;

int i;

cout << "Rec cls"<< endl;

testecls = env->FindClass("Ljava/lang/String;");

if(testecls==NULL)

cout << "Rec cls = NULL"<< endl;

cout << "Rec mtdid"<< endl;

testemtdid = env->GetMethodID(testecls,"","(Ljava/lang/String;)V");

if(testemtdid==NULL)

cout << "Rec mtdid = NULL"<< endl;

cout << "Rec obj"<< endl;

testeobj = env->NewObject(testecls, NULL);

if(testeobj==NULL)

cout << "Rec obj = NULL"<< endl;

cout << "Rec str"<< endl;

testestr = env->NewStringUTF(result->getUtterance().c_str());

if(testestr==NULL)

cout << "Rec str = NULL"<< endl;

cout << "Rec array"<< endl;

testearray = env->NewObjectArray(result->wordsNumber, testecls, testeobj);

if(testearray==NULL)

cout << "Rec array = NULL"<< endl;

for(i=0;iwordsNumber;i++){

cout << "Rec setarray"<< endl;

env->SetObjectArrayElement(testearray, i, testestr);

}

cout << "Rec before call"<< endl;

env->CallVoidMethod(obj_, midUArray, testearray);

cout << "Rec after call"<< endl;输出是,当我尝试安装字符串类型的对象时它崩溃。

Rec cls

Rec mtdid

Rec obj

#

# A fatal error has been detected by the Java Runtime Environment:

#

# SIGSEGV (0xb) at pc=0xb6dbf389, pid=15337, tid=1769995120

#

# JRE version: 6.0_24-b07

# Java VM: Java HotSpot(TM) Server VM (19.1-b02 mixed mode linux-x86 )

# Problematic frame:

# V [libjvm.so+0x3e0389]

#

# An error report file with more information is saved as:

# /home/10080000701/workspace/jlapsapi/hs_err_pid15337.log

#

# If you would like to submit a bug report, please visit:

# http://java.sun.com/webapps/bugreport/crash.jsp

#你有什么建议?

在Eclipse上配置Tomcat并使用JSP和Servlet来判断一个数是否为质数的过程主要包括以下几个步骤: 1. **设置环境变量**: - 在Eclipse中,右键点击服务器 -> 新建 -> 选择Tomcat服务器 -> 配置服务器属性。 2. **创建项目和目录结构**: - 创建一个新的Dynamic Web Project,包含JSP和Servlet文件夹。 3. **编写JSP页面**(index.jsp): ```html <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>质数检查</title> </head> <body> <form action="PrimeCheckServlet" method="post"> <input type="text" name="number" placeholder="请输入数字"/> <input type="submit" value="检查"/> </form> </body> </html> ``` 4. **创建Servlet(PrimeCheckServlet.java)**: ```java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class PrimeCheckServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String number = request.getParameter("number"); if (isPrime(Integer.parseInt(number))) { response.getWriter().println(number + " 是质数"); } else { response.getWriter().println(number + " 不是质数"); } } private boolean isPrime(int num) { if (num <= 1) return false; for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) return false; } return true; } } ``` 5. **部署到Tomcat**: - 将上述两个文件添加到项目的WebContent目录下对应的WEB-INF目录下。 - 右键点击项目 -> Run As -> Run on Server 现在当你访问`http://localhost:8080/your_project_name/index.jsp`(替换为实际的项目名),会看到一个简单的表单,用户可以输入一个数,然后通过Servlet检查它是否为质数,并在结果页面显示结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值