Commit d0bf243c5f8855933b83c03c19fe2d30f19d5106
1 parent
c052f63e
Exists in
master
and in
5 other branches
Implementando teste da classe jni
Showing
3 changed files
with
42 additions
and
6 deletions
Show diff stats
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 | } | ... | ... |