Windows: don't cache the JNIEnv pointer in the message handle, but acquire it through the global JavaVM handle.

This commit is contained in:
Elias Naur 2006-07-09 08:31:49 +00:00
parent af9e73ed11
commit 67957781a2
3 changed files with 8 additions and 3 deletions

View File

@ -301,6 +301,12 @@ JavaVM *getJVM() {
return jvm;
}
JNIEnv *getThreadEnv() {
JNIEnv *env;
(*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_4);
return env;
}
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
jvm = vm;
return JNI_VERSION_1_4;

View File

@ -122,6 +122,7 @@ extern "C" {
#endif
extern JavaVM *getJVM();
extern JNIEnv *getThreadEnv();
extern void initAttribList(attrib_list_t *list);
extern void putAttrib(attrib_list_t *list, int attrib);

View File

@ -87,11 +87,10 @@ static LRESULT CALLBACK lwjglWindowProc(HWND hWnd,
WPARAM wParam,
LPARAM lParam)
{
JNIEnv *env;
jclass display_class;
jmethodID handleMessage_method;
LONG message_time;
env = (JNIEnv *)(LONG_PTR)GetWindowLongPtr(hWnd, GWLP_USERDATA);
JNIEnv *env = getThreadEnv();
if (env != NULL && !(*env)->ExceptionOccurred(env)) {
display_class = (*env)->FindClass(env, "org/lwjgl/opengl/Win32Display");
if (display_class != NULL) {
@ -186,7 +185,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_nCreateWindow(JNIEnv *
throwException(env, "Failed to create the window.");
return;
}
SetWindowLongPtr(display_hwnd, GWLP_USERDATA, (LONG_PTR)env);
display_hdc = GetDC(display_hwnd);
ShowWindow(display_hwnd, SW_SHOWDEFAULT);
UpdateWindow(display_hwnd);