Sorulara baktığınız için teşekkür ederiz. JNI arabirimini kullanarak sınıf dosyalarında bulunan bir java yöntemini çağırmaya çalışıyorum. Sırasıyla çağrılan sınıf dosyası, aynı direcotry içinde bulunan başka bir .jar dosyasını yürütüyor olmalıdır? Bu zorlama zamanım vardı ve .jar dosyasının yürütülmesinde başarısız oldum. Yani, .jar dosyasında bulunan sınıf fuile sonuçlarını elde edemiyorum.Can C++ Uygulama .jar Dosyasını JNI kullanarak yükleyebilir mi?
Bu şekilde yapmanın mümkün olup olmadığını veya herhangi bir seçenek için bakmam gerektiğini herhangi biri açıklayabilir mi?
kod şu şekildedir:
class JNIInterface
{
private:
JavaVMInitArgs vm_args;
JavaVM *jvm;
JNIEnv *env;
long result;
jmethodID mid;
jfieldID fid;
jobject jobj;
jclass cls;
int asize;
char JVMOptionString[20];
char className[20];
char methodName[20];
JavaVMOption options[1];
public:
JNIInterface(char* JVMOptionString)
{
// JavaVMOption options[1];
options[0].optionString = JVMOptionString;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.version = JNI_VERSION_1_6;
vm_args.ignoreUnrecognized = JNI_FALSE;
}
void setClassName(char* className)
{
result = JNI_CreateJavaVM(&jvm,(void **)&env, &vm_args);
if(result == JNI_ERR)
{
printf("Error invoking the JVM\n");
//return 0;
}
cls = env->FindClass("F2C");
if(cls == NULL)
{
printf("can't find class F2C\n");
//return 0;
}
env->ExceptionClear();
}
void setMethodName(char* methodName)
{
cout<<"---------- Function Name is "<<methodName<<endl;
//---------- Integer Value with Parameter ----------------
mid=env->GetStaticMethodID(cls, methodName, "([Ljava/lang/String;)V");
if (mid != NULL)
{
env->CallStaticVoidMethod(cls,mid,"70");
}
int main()
{
JNIInterface JNIInterfaceObj("-Djava.class.path=C:\\MyPOC;C:\\MyPOC\\herong.jar");
JNIInterfaceObj.setClassName("F2C");
JNIInterfaceObj.setMethodName("main");
return 0;
}
.
//The java file which is calling jar files is - F2C.java
/**
* F2C.java
* Copyright (c) 2006 by Dr. Herong Yang, http://www.herongyang.com/
*/
import herong.TempratureConvertorBean;
public class F2C {
public void test(String[] arg) {
try {
double f = 0.0;
System.out.println("Inside test func:");
TempratureConvertorBean b = new TempratureConvertorBean();
if (arg.length>0) f = Double.parseDouble(arg[0]);
b.setFahrenheit(f);
double c = b.getCelsius();
System.out.println("Fahrenheit = "+f);
System.out.println("Celsius = "+c);
System.out.println(b.getInfo());
}
}
public static void main(String[] arg) {
F2C f2c = new F2C();
f2c.test(arg);
}
}
bu F2C.java Eğer bir fikrin varsa önerin herong.jar dosyasını
kullanır. Java bir .jar dosyasına bakmak almak için sadece iki yolu vardır Java'da
sayesinde ASG