Commit 1241cdd4c0ab477ba9cb2f7c2d14d3e4ba1730dd
1 parent
038c761d
Exists in
master
and in
5 other branches
Implementando plugin java
Showing
7 changed files
with
89 additions
and
13 deletions
Show diff stats
pw3270.cbp
| @@ -150,6 +150,10 @@ | @@ -150,6 +150,10 @@ | ||
| 150 | <Option target="Debug" /> | 150 | <Option target="Debug" /> |
| 151 | <Option target="Release" /> | 151 | <Option target="Release" /> |
| 152 | </Unit> | 152 | </Unit> |
| 153 | + <Unit filename="src/java/sample/popup.java"> | ||
| 154 | + <Option target="Debug" /> | ||
| 155 | + <Option target="Release" /> | ||
| 156 | + </Unit> | ||
| 153 | <Unit filename="src/java/terminal.java"> | 157 | <Unit filename="src/java/terminal.java"> |
| 154 | <Option target="Debug" /> | 158 | <Option target="Debug" /> |
| 155 | <Option target="Release" /> | 159 | <Option target="Release" /> |
src/classlib/session.cc
| @@ -121,6 +121,7 @@ | @@ -121,6 +121,7 @@ | ||
| 121 | 121 | ||
| 122 | void session::set_plugin(session * (*factory)(const char *name)) | 122 | void session::set_plugin(session * (*factory)(const char *name)) |
| 123 | { | 123 | { |
| 124 | + trace("%s(%p)",__FUNCTION__,factory); | ||
| 124 | session::factory = factory; | 125 | session::factory = factory; |
| 125 | } | 126 | } |
| 126 | 127 |
src/java/Makefile.in
| @@ -120,6 +120,16 @@ $(BINDIR)/java/%.class: sample/%.java $(BINDIR)/java/$(PACKAGE_NAME)/terminal.cl | @@ -120,6 +120,16 @@ $(BINDIR)/java/%.class: sample/%.java $(BINDIR)/java/$(PACKAGE_NAME)/terminal.cl | ||
| 120 | @mkdir -p `dirname $@` | 120 | @mkdir -p `dirname $@` |
| 121 | $(JAVAC) -encoding utf-8 -cp $(BINDIR)/java -d $(BINDIR)/java $< | 121 | $(JAVAC) -encoding utf-8 -cp $(BINDIR)/java -d $(BINDIR)/java $< |
| 122 | 122 | ||
| 123 | +$(BINDIR)/%.class: sample/%.java $(BINDIR)/java/$(PACKAGE_NAME)/terminal.class | ||
| 124 | + @echo $< ... | ||
| 125 | + @mkdir -p `dirname $@` | ||
| 126 | + $(JAVAC) -encoding utf-8 -cp $(BINDIR)/java -d $(BINDIR)/java $< | ||
| 127 | + | ||
| 128 | +%.class: sample/%.java $(BINDIR)/java/$(PACKAGE_NAME)/terminal.class | ||
| 129 | + @echo $< ... | ||
| 130 | + @mkdir -p `dirname $@` | ||
| 131 | + $(JAVAC) -encoding utf-8 -cp $(BINDIR)/java -d `dirname $@` $< | ||
| 132 | + | ||
| 123 | $(BINDIR)/java/$(PACKAGE_NAME)/%.class: %.java | 133 | $(BINDIR)/java/$(PACKAGE_NAME)/%.class: %.java |
| 124 | @echo $< ... | 134 | @echo $< ... |
| 125 | @mkdir -p `dirname $@` | 135 | @mkdir -p `dirname $@` |
| @@ -144,6 +154,8 @@ zip: jni3270.zip | @@ -144,6 +154,8 @@ zip: jni3270.zip | ||
| 144 | jni3270.zip: $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINRLS)/$(PACKAGE_NAME).jar testprogram.java doc | 154 | jni3270.zip: $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINRLS)/$(PACKAGE_NAME).jar testprogram.java doc |
| 145 | @rm -fr .tmp.zip | 155 | @rm -fr .tmp.zip |
| 146 | @rm -f $@ | 156 | @rm -f $@ |
| 157 | + @mkdir -p .tmp.zip | ||
| 158 | + @mkdir -p .tmp.zip/ | ||
| 147 | @zip -9 -j $@ $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINRLS)/$(PACKAGE_NAME).jar testprogram.java | 159 | @zip -9 -j $@ $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINRLS)/$(PACKAGE_NAME).jar testprogram.java |
| 148 | @zip -9 -r $@ doc | 160 | @zip -9 -r $@ doc |
| 149 | 161 |
src/java/main.cc
| @@ -33,6 +33,7 @@ | @@ -33,6 +33,7 @@ | ||
| 33 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 33 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
| 34 | 34 | ||
| 35 | void set_java_session_factory(PW3270_NAMESPACE::session * (*factory)(const char *name)) { | 35 | void set_java_session_factory(PW3270_NAMESPACE::session * (*factory)(const char *name)) { |
| 36 | + trace("%s(%p)",__FUNCTION__,factory); | ||
| 36 | session::set_plugin(factory); | 37 | session::set_plugin(factory); |
| 37 | } | 38 | } |
| 38 | 39 | ||
| @@ -49,6 +50,8 @@ session * getHandle(JNIEnv *env, jobject obj) { | @@ -49,6 +50,8 @@ session * getHandle(JNIEnv *env, jobject obj) { | ||
| 49 | 50 | ||
| 50 | JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) { | 51 | JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) { |
| 51 | 52 | ||
| 53 | + trace("%s",__FUNCTION__); | ||
| 54 | + | ||
| 52 | try { | 55 | try { |
| 53 | 56 | ||
| 54 | jlong handle = reinterpret_cast<jlong>(session::create()); | 57 | jlong handle = reinterpret_cast<jlong>(session::create()); |
| @@ -56,6 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) { | @@ -56,6 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) { | ||
| 56 | 59 | ||
| 57 | } catch(std::exception &e) { | 60 | } catch(std::exception &e) { |
| 58 | 61 | ||
| 62 | + trace("%s: %s",__FUNCTION__,e.what()); | ||
| 59 | env->ThrowNew(env->FindClass("java/lang/Exception"), e.what()); | 63 | env->ThrowNew(env->FindClass("java/lang/Exception"), e.what()); |
| 60 | 64 | ||
| 61 | } | 65 | } |
src/java/plugin.cc
| @@ -306,10 +306,22 @@ | @@ -306,10 +306,22 @@ | ||
| 306 | 306 | ||
| 307 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 307 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
| 308 | 308 | ||
| 309 | - static session * factory(const char *name) | ||
| 310 | - { | ||
| 311 | - return new plugin(lib3270_get_default_session_handle()); | ||
| 312 | - } | 309 | +extern "C" { |
| 310 | + | ||
| 311 | + static session * factory(const char *name) | ||
| 312 | + { | ||
| 313 | + debug("---> %s",__FUNCTION__); | ||
| 314 | + return new plugin(lib3270_get_default_session_handle()); | ||
| 315 | + } | ||
| 316 | + | ||
| 317 | + static jint JNICALL jni_vfprintf(FILE *fp, const char *format, va_list args) | ||
| 318 | + { | ||
| 319 | + lib3270_write_va_log(lib3270_get_default_session_handle(),"java",format,args); | ||
| 320 | + return 0; | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | +} | ||
| 324 | + | ||
| 313 | 325 | ||
| 314 | LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window) | 326 | LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window) |
| 315 | { | 327 | { |
| @@ -367,20 +379,32 @@ | @@ -367,20 +379,32 @@ | ||
| 367 | memset(&vm_args,0,sizeof(vm_args)); | 379 | memset(&vm_args,0,sizeof(vm_args)); |
| 368 | memset(options,0,sizeof(options)); | 380 | memset(options,0,sizeof(options)); |
| 369 | 381 | ||
| 370 | - vm_args.version = JNI_VERSION_1_2; | ||
| 371 | - vm_args.nOptions = 0; | ||
| 372 | - vm_args.options = options; | 382 | + vm_args.version = JNI_VERSION_1_4; |
| 383 | + vm_args.nOptions = 0; | ||
| 384 | + vm_args.options = options; | ||
| 385 | + vm_args.ignoreUnrecognized = JNI_FALSE; | ||
| 386 | + | ||
| 387 | + options[vm_args.nOptions].optionString = g_strdup("vfprintf"); | ||
| 388 | + options[vm_args.nOptions].extraInfo = (void *) jni_vfprintf; | ||
| 389 | + vm_args.nOptions++; | ||
| 373 | 390 | ||
| 374 | -#ifdef DEBUG | ||
| 375 | - options[vm_args.nOptions++].optionString = g_strdup("-verbose"); | ||
| 376 | -#endif | 391 | +//#ifdef DEBUG |
| 392 | +// options[vm_args.nOptions++].optionString = g_strdup("-verbose"); | ||
| 393 | +//#endif | ||
| 377 | 394 | ||
| 378 | gchar * dirname = g_path_get_dirname(filename); | 395 | gchar * dirname = g_path_get_dirname(filename); |
| 379 | 396 | ||
| 380 | #if defined( WIN32 ) | 397 | #if defined( WIN32 ) |
| 381 | 398 | ||
| 399 | + g_mkdir_with_parents("./jvm-exports",0777); | ||
| 400 | + | ||
| 382 | options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s","."); | 401 | options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s","."); |
| 383 | - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=.;%s",dirname); | 402 | + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=./jvm-exports;%s",dirname); |
| 403 | + | ||
| 404 | +#elif defined(DEBUG) | ||
| 405 | + | ||
| 406 | + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s:.bin/Debug:.bin/Debug/lib",JNIDIR); | ||
| 407 | + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s:%s:./src/java/.bin/java",JARDIR,dirname); | ||
| 384 | 408 | ||
| 385 | #else | 409 | #else |
| 386 | 410 | ||
| @@ -458,7 +482,15 @@ | @@ -458,7 +482,15 @@ | ||
| 458 | 482 | ||
| 459 | jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF("")); | 483 | jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF("")); |
| 460 | 484 | ||
| 461 | - env->CallStaticVoidMethod(cls, mid, args); | 485 | + try { |
| 486 | + | ||
| 487 | + env->CallStaticVoidMethod(cls, mid, args); | ||
| 488 | + | ||
| 489 | + } catch(std::exception &e) { | ||
| 490 | + | ||
| 491 | + trace("%s",e.what()); | ||
| 492 | + } | ||
| 493 | + | ||
| 462 | 494 | ||
| 463 | } | 495 | } |
| 464 | 496 |
src/java/run.sh
| @@ -3,5 +3,5 @@ make -C ../.. Debug | @@ -3,5 +3,5 @@ make -C ../.. Debug | ||
| 3 | make Debug | 3 | make Debug |
| 4 | make .bin/java/${1}.class | 4 | make .bin/java/${1}.class |
| 5 | 5 | ||
| 6 | -LD_LIBRARY_PATH=../../.bin/Debug/lib/ java -Djava.library.path=.bin/Debug -cp .bin/java/ ${1} | 6 | +LD_LIBRARY_PATH=../../.bin/Debug/lib/ java -Djava.library.path=/usr/local/lib64/java:.bin/Debug/lib -cp .bin/java/ ${1} |
| 7 | 7 |
| @@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
| 1 | + | ||
| 2 | +import pw3270.*; | ||
| 3 | + | ||
| 4 | +public class popup | ||
| 5 | +{ | ||
| 6 | + public static void main (String[] args) | ||
| 7 | + { | ||
| 8 | + System.out.println("Begin"); | ||
| 9 | + | ||
| 10 | + try { | ||
| 11 | + | ||
| 12 | + terminal host = new terminal(); | ||
| 13 | + System.out.println("Output: " + host.popup_dialog(0,"Title","This is a popup message", "And this is a secondary and more detailed text")); | ||
| 14 | + | ||
| 15 | + } catch( Exception e ) { | ||
| 16 | + | ||
| 17 | + System.out.println("Error: " + e); | ||
| 18 | + | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + System.out.println("End"); | ||
| 22 | + } | ||
| 23 | +}; |