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 | 150 | <Option target="Debug" /> |
151 | 151 | <Option target="Release" /> |
152 | 152 | </Unit> |
153 | + <Unit filename="src/java/sample/popup.java"> | |
154 | + <Option target="Debug" /> | |
155 | + <Option target="Release" /> | |
156 | + </Unit> | |
153 | 157 | <Unit filename="src/java/terminal.java"> |
154 | 158 | <Option target="Debug" /> |
155 | 159 | <Option target="Release" /> | ... | ... |
src/classlib/session.cc
src/java/Makefile.in
... | ... | @@ -120,6 +120,16 @@ $(BINDIR)/java/%.class: sample/%.java $(BINDIR)/java/$(PACKAGE_NAME)/terminal.cl |
120 | 120 | @mkdir -p `dirname $@` |
121 | 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 | 133 | $(BINDIR)/java/$(PACKAGE_NAME)/%.class: %.java |
124 | 134 | @echo $< ... |
125 | 135 | @mkdir -p `dirname $@` |
... | ... | @@ -144,6 +154,8 @@ zip: jni3270.zip |
144 | 154 | jni3270.zip: $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINRLS)/$(PACKAGE_NAME).jar testprogram.java doc |
145 | 155 | @rm -fr .tmp.zip |
146 | 156 | @rm -f $@ |
157 | + @mkdir -p .tmp.zip | |
158 | + @mkdir -p .tmp.zip/ | |
147 | 159 | @zip -9 -j $@ $(BINRLS)@DLLDIR@/@DLLPREFIX@jni3270@DLLEXT@ $(BINRLS)/$(PACKAGE_NAME).jar testprogram.java |
148 | 160 | @zip -9 -r $@ doc |
149 | 161 | ... | ... |
src/java/main.cc
... | ... | @@ -33,6 +33,7 @@ |
33 | 33 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
34 | 34 | |
35 | 35 | void set_java_session_factory(PW3270_NAMESPACE::session * (*factory)(const char *name)) { |
36 | + trace("%s(%p)",__FUNCTION__,factory); | |
36 | 37 | session::set_plugin(factory); |
37 | 38 | } |
38 | 39 | |
... | ... | @@ -49,6 +50,8 @@ session * getHandle(JNIEnv *env, jobject obj) { |
49 | 50 | |
50 | 51 | JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) { |
51 | 52 | |
53 | + trace("%s",__FUNCTION__); | |
54 | + | |
52 | 55 | try { |
53 | 56 | |
54 | 57 | jlong handle = reinterpret_cast<jlong>(session::create()); |
... | ... | @@ -56,6 +59,7 @@ JNIEXPORT jint JNICALL Java_pw3270_terminal_init__(JNIEnv *env, jobject obj) { |
56 | 59 | |
57 | 60 | } catch(std::exception &e) { |
58 | 61 | |
62 | + trace("%s: %s",__FUNCTION__,e.what()); | |
59 | 63 | env->ThrowNew(env->FindClass("java/lang/Exception"), e.what()); |
60 | 64 | |
61 | 65 | } | ... | ... |
src/java/plugin.cc
... | ... | @@ -306,10 +306,22 @@ |
306 | 306 | |
307 | 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 | 326 | LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window) |
315 | 327 | { |
... | ... | @@ -367,20 +379,32 @@ |
367 | 379 | memset(&vm_args,0,sizeof(vm_args)); |
368 | 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 | 395 | gchar * dirname = g_path_get_dirname(filename); |
379 | 396 | |
380 | 397 | #if defined( WIN32 ) |
381 | 398 | |
399 | + g_mkdir_with_parents("./jvm-exports",0777); | |
400 | + | |
382 | 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 | 409 | #else |
386 | 410 | |
... | ... | @@ -458,7 +482,15 @@ |
458 | 482 | |
459 | 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 | 3 | make Debug |
4 | 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 @@ |
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 | +}; | ... | ... |