--- old/modules/javafx.graphics/src/main/native-glass/gtk/GlassApplication.cpp 2016-09-05 14:04:48.052773900 +0300 +++ new/modules/javafx.graphics/src/main/native-glass/gtk/GlassApplication.cpp 2016-09-05 14:04:47.830745700 +0300 @@ -56,10 +56,21 @@ { RunnableContext* context = reinterpret_cast(data); - mainEnv->CallVoidMethod(context->runnable, jRunnableRun, NULL); - LOG_EXCEPTION(mainEnv); - mainEnv->DeleteGlobalRef(context->runnable); + JNIEnv *env; + int envStatus = javaVM->GetEnv((void **)&env, JNI_VERSION_1_6); + if (envStatus == JNI_EDETACHED) { + javaVM->AttachCurrentThread((void **)&env, NULL); + } + + env->CallVoidMethod(context->runnable, jRunnableRun, NULL); + LOG_EXCEPTION(env); + env->DeleteGlobalRef(context->runnable); free(context); + + if (envStatus == JNI_EDETACHED) { + javaVM->DetachCurrentThread(); + } + return FALSE; } --- old/modules/javafx.graphics/src/main/native-glass/gtk/GlassTimer.cpp 2016-09-05 14:04:49.379942400 +0300 +++ new/modules/javafx.graphics/src/main/native-glass/gtk/GlassTimer.cpp 2016-09-05 14:04:49.154413800 +0300 @@ -79,8 +79,18 @@ return FALSE; } else if (context->runnable) { - mainEnv->CallVoidMethod(context->runnable, jRunnableRun, NULL); - LOG_EXCEPTION(mainEnv); + JNIEnv *env; + int envStatus = javaVM->GetEnv((void **)&env, JNI_VERSION_1_6); + if (envStatus == JNI_EDETACHED) { + javaVM->AttachCurrentThread((void **)&env, NULL); + } + + env->CallVoidMethod(context->runnable, jRunnableRun, NULL); + LOG_EXCEPTION(env); + + if (envStatus == JNI_EDETACHED) { + javaVM->DetachCurrentThread(); + } } return TRUE; } --- old/modules/javafx.graphics/src/main/native-glass/gtk/glass_general.cpp 2016-09-05 14:04:50.689608700 +0300 +++ new/modules/javafx.graphics/src/main/native-glass/gtk/glass_general.cpp 2016-09-05 14:04:50.464580100 +0300 @@ -118,6 +118,8 @@ return displayValid; } +JavaVM* javaVM; + JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { @@ -127,9 +129,10 @@ jclass clazz; Display* display; + javaVM = jvm; if (jvm->GetEnv((void **)&env, JNI_VERSION_1_6)) { return JNI_ERR; /* JNI version not supported */ - } + } clazz = env->FindClass("java/lang/String"); if (env->ExceptionCheck()) return JNI_ERR; --- old/modules/javafx.graphics/src/main/native-glass/gtk/glass_general.h 2016-09-05 14:04:52.043780700 +0300 +++ new/modules/javafx.graphics/src/main/native-glass/gtk/glass_general.h 2016-09-05 14:04:51.818252000 +0300 @@ -42,6 +42,7 @@ #define URI_LIST_LINE_BREAK "\r\n" extern JNIEnv* mainEnv; // Use only with main loop thread!!! +extern JavaVM* javaVM; #include