From 7e3238e236706ed925b0b1928cbca22b8dfe912a Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Thu, 2 Jul 2015 01:14:13 +0000 Subject: [PATCH] Remodelando módulo java --- src/java/call.cc | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- src/java/startstop.cc | 28 +++++++++++++++++++++------- ui/80java.xml | 6 ++++-- 3 files changed, 118 insertions(+), 14 deletions(-) diff --git a/src/java/call.cc b/src/java/call.cc index 8376b23..2be084d 100644 --- a/src/java/call.cc +++ b/src/java/call.cc @@ -30,6 +30,7 @@ #include "private.h" #include + #include /*---[ Implement ]----------------------------------------------------------------------------------*/ @@ -37,7 +38,7 @@ namespace PW3270_NAMESPACE { - void java::call(GtkWidget *widget, const char *filename) { + void java::call(GtkWidget *widget, const char *classname) { if(!trylock()) { @@ -49,6 +50,7 @@ namespace PW3270_NAMESPACE { if(jvm || load_jvm(widget)) { v3270_set_script(widget,'J',TRUE); +/* gchar * dirname = g_path_get_dirname(filename); gchar * classname = g_path_get_basename(filename); @@ -58,25 +60,108 @@ namespace PW3270_NAMESPACE { *ptr = 0; } + gchar * classpath; + +#ifdef _WIN32 + + char buffer[1024]; + gchar * exports; + + if(GetModuleFileName(NULL,buffer,sizeof(buffer)) < sizeof(buffer)) { + + gchar * ptr = strrchr(buffer,G_DIR_SEPARATOR); + if(ptr) { + *ptr = 0; + exports = g_build_filename(buffer,"jvm-exports",NULL); + } else { + exports = g_build_filename(".","jvm-exports",NULL); + } + + + } else { + + exports = g_build_filename(".","jvm-exports",NULL); + + } + + debug("myDir=%s",myDir); + + g_mkdir_with_parents(exports,0777); + +#ifdef DEBUG + classpath = g_strdup_printf("%s;%s;.bin/java",dirname,exports); +#else + classpath = g_strdup_printf("%s;%s",dirname,exports); +#endif + + g_free(exports); +#else + +#ifdef DEBUG + classpath = g_strdup_printf("%s:%s:.bin/java",dirname,JARDIR); +#else + classpath = g_strdup_printf("%s:%s",dirname,JARDIR); +#endif + +#endif // _WIN32 +*/ try { jclass cls; jmethodID mid; + /* + + DONT WORK!! + http://stackoverflow.com/questions/271506/why-cant-system-setproperty-change-the-classpath-at-runtime + // Atualizar o classpath - cls = env->FindClass("java.lang.System"); + cls = env->FindClass("java/lang/System"); + if(!cls) { + throw exception( _( "Can't find class %s" ), "java/lang/System"); + } + + mid = env->GetStaticMethodID(cls, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"); + if(!mid) { + throw exception( _( "Can't find method %s/%s" ), "java/lang/System","setProperty"); + } + + lib3270_trace_event(v3270_get_session(widget),"java.class.path=%s\n",classpath); + + jstring name = env->NewStringUTF("java.class.path"); + jstring path = env->NewStringUTF(classpath); + + jstring rc = (jstring) env->CallObjectMethod(cls,mid,name,path); + + env->DeleteLocalRef(name); + env->DeleteLocalRef(path); + env->DeleteLocalRef(rc); + */ + + // Get application entry point. + cls = env->FindClass(classname); if(!cls) { - throw exception( _( "Can't find class %s" ), "java.lang.System"); + throw exception( _( "Can't find class %s" ), classname); } - mid = env->GetStaticMethodID(cls, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String"); + mid = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V"); if(!mid) { - throw exception( _( "Can't find method %s/%d" ), "java.lang.System","setProperty"); + throw exception( _( "Can't find method %s/%s" ), classname, "main"); } + // Build arguments + jobjectArray args = env->NewObjectArray(0, env->FindClass("java/lang/String"), env->NewStringUTF("")); + // Call main() + env->CallStaticVoidMethod(cls, mid, args); + + // Check for exception + + + // And finish + env->DeleteLocalRef(args); } catch(std::exception &e) { @@ -84,8 +169,11 @@ namespace PW3270_NAMESPACE { } +/* g_free(dirname); g_free(classname); + g_free(classpath); +*/ v3270_set_script(widget,'J',FALSE); diff --git a/src/java/startstop.cc b/src/java/startstop.cc index 87d742b..7a54bea 100644 --- a/src/java/startstop.cc +++ b/src/java/startstop.cc @@ -104,18 +104,19 @@ extern "C" { LIB3270_EXPORT void pw3270_action_java_activated(GtkAction *action, GtkWidget *widget) { - gchar *filename = (gchar *) g_object_get_data(G_OBJECT(action),"src"); + gchar *classname = (gchar *) g_object_get_data(G_OBJECT(action),"src"); - lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget); + lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(action),widget); - if(filename) + if(classname) { // Has filename, call it directly - call(widget,filename); + call(widget,classname); } else { - // No filename, ask user +/* + // No classname, ask user static const struct _list { const gchar *name; @@ -144,7 +145,7 @@ extern "C" { call(widget,filename); g_free(filename); } - +*/ } } @@ -166,6 +167,17 @@ extern "C" { gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" )); + if(format) { + + va_list arg_ptr; + va_start(arg_ptr, format); + gchar *msg = g_strdup_vprintf(format,arg_ptr); + va_end(arg_ptr); + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg); + g_free(msg); + + } + if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL) gtk_main_quit(); gtk_widget_destroy(dialog); @@ -212,11 +224,13 @@ extern "C" { #if defined(DEBUG) // options[vm_args.nOptions++].optionString = g_strdup("-verbose"); - options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s:.bin/Debug:.bin/Debug/lib",JNIDIR); + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=.bin/Debug:.bin/Debug/lib:%s",JNIDIR); + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=./src/java:.bin/java:%s",JARDIR); #else options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",JNIDIR); + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.class.path=%s",JARDIR); #endif // JNIDIR diff --git a/ui/80java.xml b/ui/80java.xml index b28ada0..5e96298 100644 --- a/ui/80java.xml +++ b/ui/80java.xml @@ -34,8 +34,10 @@ - - + + + + -- libgit2 0.21.2