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 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 47 try {
48 48  
... ... @@ -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 79 return 0;
60 80 }
61 81  
62 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 100 return 0;
70 101 }
... ...
src/java/terminal.java
... ... @@ -31,10 +31,11 @@ package pw3270;
31 31  
32 32 public class terminal
33 33 {
34   - // PW3270 session handle
  34 + // lib3270's session handle
35 35 private long nativeHandle;
36 36  
37 37 // Init/Deinit
  38 + private native int init();
38 39 private native int init(String id);
39 40 private native int deinit();
40 41  
... ... @@ -43,6 +44,10 @@ public class terminal
43 44 public native String get_revision();
44 45  
45 46  
  47 + public terminal() {
  48 + init();
  49 + }
  50 +
46 51 public terminal(String id) {
47 52 init(id);
48 53 }
... ...
src/java/testprogram.java
... ... @@ -36,7 +36,7 @@ public class testprogram
36 36 try
37 37 {
38 38 System.err.println("Begin");
39   - terminal host = new terminal("pw3270:a");
  39 + terminal host = new terminal();
40 40 System.err.println("pw3270 version " + host.get_version() + " revision " + host.get_revision());
41 41 System.err.println("End");
42 42 }
... ...