我有一个问题需要解决:
我有一个带有本机方法的java,它创建一个对象并利用该对象的方法。 这是我的java代码: 我有一个名为IssmJni的java文件,它包含一个本机方法:
public static native long fac(long n);
static {
System.loadLibrary("FacLib");
}
public static long facIterative(long n)
{
return fac(n);
在我的主要课程中我有这个:
long result = IssmJni.facIterative(Long.parseLong(input));
System.out.println(result);
这是我的C ++代码: 主文件:
static jlong factorial(JNIEnv *env, jclass clazz, jlong n)
{
fac *f = new fac();
jlong result = (jlong) (f->factorial(n));
delete(f);
return (jlong) result;
}
头文件:
class fac
{
public:
long factorial(long n);
};
fac.cpp:
#include "com_lan_factorial_FacLib.h"
#include "fac.h"
long fac::factorial(long n)
{
long f = 1;
long i;
for(i = 1; i <= n; i++)
{
f *= i;
}
return f;
}
一切正常,所以发生的事情是UI将提供一个数字,称为C ++代码并生成一个新的对象调用fac,并在该类fac中使用方法factorial。 通过这一行
fac * f = new fac(); jlong result =(jlong)(f-&gt; factorial(n));
我想要的是保持相同的对象fac,但使用不同输入的阶乘方法。我试图远离pthread,因为它太复杂了。有没有办法我可以创建另一个java线程并在我的应用程序的整个过程中保持此对象存活,并在我有新用户输入时使用该因子。然后在应用程序死亡时摆脱这个对象?
总而言之,我想保留1个对象fac实例,并多次使用阶乘方法。没有做原生pthread是否可能? 感谢
答案 0 :(得分:0)
这就是我想出来的。
static fac* pfac = NULL;
namespace com_lan_factorial
{
static jlong factorial(JNIEnv *env, jclass clazz, jlong n)
{
pfac = new fac();
jlong result = (jlong) (pfac->factorial(n));
return (jlong) result;
}
static jlong factorial_ten(JNIEnv *env, jclass clazz)
{
jlong result = (jlong) (pfac->factorial(3));
return (jlong) result;
}
所以我创建一个名为pfac的指针,在第一次运行时,pfac将被分配给一个新对象pfac = new fac();在第二次运行时,我只是重用了pfac指针并调用了阶乘函数。这完全有效,但我不确定这是用2因子方法创建2个fac对象,还是只用1 fac方法和相同的析因方法。任何人都可以验证。感谢