Commit d0bf243c5f8855933b83c03c19fe2d30f19d5106

Authored by perry.werneck@gmail.com
1 parent c052f63e

Implementando teste da classe jni

src/java/main.cc
@@ -42,7 +42,7 @@ session * getHandle(JNIEnv *env, jobject obj) { @@ -42,7 +42,7 @@ session * getHandle(JNIEnv *env, jobject obj) {
42 return reinterpret_cast<PW3270_NAMESPACE::session *>(handle); 42 return reinterpret_cast<PW3270_NAMESPACE::session *>(handle);
43 } 43 }
44 44
45 -JNIEXPORT jint JNICALL Java_pw3270_terminal_init(JNIEnv *env, jobject obj, jstring id) { 45 +JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) {
46 46
47 try { 47 try {
48 48
@@ -55,16 +55,47 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_init(JNIEnv *env, jobject obj, jstri @@ -55,16 +55,47 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_init(JNIEnv *env, jobject obj, jstri
55 55
56 } 56 }
57 57
  58 +}
  59 +
  60 +
  61 +JNIEXPORT jint JNICALL Java_pw3270_terminal_init__Ljava_lang_String_2(JNIEnv *env, jobject obj, jstring j_id) {
  62 +
  63 + const char * id = env->GetStringUTFChars(j_id, 0);
  64 +
  65 + try {
  66 +
  67 + jlong handle = reinterpret_cast<jlong>(session::create(id));
  68 + env->SetLongField(obj, getHandleField(env, obj), handle);
  69 + env->ReleaseStringUTFChars( j_id, id);
  70 +
  71 + } catch(std::exception &e) {
  72 +
  73 + env->ReleaseStringUTFChars( j_id, id);
  74 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  75 +
  76 + }
  77 +
58 78
59 return 0; 79 return 0;
60 } 80 }
61 81
62 JNIEXPORT jint JNICALL Java_pw3270_terminal_deinit(JNIEnv *env, jobject obj) { 82 JNIEXPORT jint JNICALL Java_pw3270_terminal_deinit(JNIEnv *env, jobject obj) {
63 83
64 - session *s = getHandle(env,obj);  
65 - delete s; 84 + try {
  85 +
  86 + session *s = getHandle(env,obj);
  87 +
  88 + if(s) {
  89 + delete s;
  90 + }
66 91
67 - env->SetLongField(obj, getHandleField(env, obj), 0); 92 + env->SetLongField(obj, getHandleField(env, obj), 0);
  93 +
  94 + } catch(std::exception &e) {
  95 +
  96 + env->ThrowNew(env->FindClass("java/lang/Exception"), e.what());
  97 +
  98 + }
68 99
69 return 0; 100 return 0;
70 } 101 }
src/java/terminal.java
@@ -31,10 +31,11 @@ package pw3270; @@ -31,10 +31,11 @@ package pw3270;
31 31
32 public class terminal 32 public class terminal
33 { 33 {
34 - // PW3270 session handle 34 + // lib3270's session handle
35 private long nativeHandle; 35 private long nativeHandle;
36 36
37 // Init/Deinit 37 // Init/Deinit
  38 + private native int init();
38 private native int init(String id); 39 private native int init(String id);
39 private native int deinit(); 40 private native int deinit();
40 41
@@ -43,6 +44,10 @@ public class terminal @@ -43,6 +44,10 @@ public class terminal
43 public native String get_revision(); 44 public native String get_revision();
44 45
45 46
  47 + public terminal() {
  48 + init();
  49 + }
  50 +
46 public terminal(String id) { 51 public terminal(String id) {
47 init(id); 52 init(id);
48 } 53 }
src/java/testprogram.java
@@ -36,7 +36,7 @@ public class testprogram @@ -36,7 +36,7 @@ public class testprogram
36 try 36 try
37 { 37 {
38 System.err.println("Begin"); 38 System.err.println("Begin");
39 - terminal host = new terminal("pw3270:a"); 39 + terminal host = new terminal();
40 System.err.println("pw3270 version " + host.get_version() + " revision " + host.get_revision()); 40 System.err.println("pw3270 version " + host.get_version() + " revision " + host.get_revision());
41 System.err.println("End"); 41 System.err.println("End");
42 } 42 }