AttachCurrentThread Is Stuck in JNIJNI AttachCurrentThread NULLs the jenvissue creating java native interfaceFailed to load the JNI shared Library (JDK)What makes JNI calls slow?NDK app onDestroy cleanup - how to DetachCurrentThreadJNI: map jobject to native c++ objectJNI UnsatisfiedLinkError… signature discrepancy?Segmentation Fault in JNI AttachCurrentThreadJNI: AttachCurrentThread returns -1Compiling JNI C++ Native Code with x86_64-w64-mingw32-g++
How can I find out about the game world without meta-influencing it?
Commencez à vous connecter -- I don't understand the phrasing of this
Dedicated bike GPS computer over smartphone
Would a bit of grease on overhead door cables or bearings cause the springs to break?
Placement of positioning lights on A320 winglets
Is fission/fusion to iron the most efficient way to convert mass to energy?
Why is it bad to use your whole foot in rock climbing
Interview was just a one hour panel. Got an offer the next day; do I accept or is this a red flag?
Is it ethical to cite a reviewer's papers even if they are rather irrelevant?
Is it possible to have battery technology that can't be duplicated?
What did the 8086 (and 8088) do upon encountering an illegal instruction?
Any gotchas in buying second-hand sanitary ware?
What does the "titan" monster tag mean?
Is it possible to install Firefox on Ubuntu with no desktop enviroment?
How effective would a full set of plate armor be against wild animals found in temperate regions (bears, snakes, wolves)?
Should I move out from my current apartment before the contract ends to save more money?
Why is gun control associated with the socially liberal Democratic party?
My parents claim they cannot pay for my college education; what are my options?
Manager wants to hire me; HR does not. How to proceed?
Will users know a CardView is clickable
What publication claimed that Michael Jackson died in a nuclear holocaust?
How to represent jealousy in a cute way?
A flower's head or heart?
Approach sick days in feedback meeting
AttachCurrentThread Is Stuck in JNI
JNI AttachCurrentThread NULLs the jenvissue creating java native interfaceFailed to load the JNI shared Library (JDK)What makes JNI calls slow?NDK app onDestroy cleanup - how to DetachCurrentThreadJNI: map jobject to native c++ objectJNI UnsatisfiedLinkError… signature discrepancy?Segmentation Fault in JNI AttachCurrentThreadJNI: AttachCurrentThread returns -1Compiling JNI C++ Native Code with x86_64-w64-mingw32-g++
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I am trying to understand the strange behaviour of JNI Application. I am starting the thread from native JNI dll routine (sayHello), which in its turn when started, tries to attach to JVM thread to acquire the the environment variable. However it seams that it cannot do so unless main thread is exiting. How come? In example below (disregard the thread memory leak) the thread routine foo will succeed to attach to JVM only after Thread.sleep(5000) in main thread; Why is that?
OUTPUT:
Hello World!!!
Hello World from C++!
Hello FROM FOO
Good Bye World!!!
%%% JNIEnv attached : 00000206FF8E7B40
JAVA CODE
package com.home;
public class Main
static
System.loadLibrary("JNITest"); // Load native library hello.dll (Windows) or libhello.so (Unixes)
// at runtime
// This library contains a native method called sayHello()
public static void main(String[] args) throws Exception
// TODO Auto-generated method stub
System.out.println("Hello World!!!");
new Main().sayHello();
Thread.sleep(5000);
System.out.println("Good Bye World!!!");
// Declare an instance native method sayHello() which receives no parameter and returns void
private native void sayHello();
JNI DLL
// JNITest.cpp : Defines the exported functions for the DLL application.
//
#include "com_home_Main.h"
#include "stdafx.h"
#include <iostream>
#include <thread>
static JavaVM *g_jVM = NULL;
using namespace std;
void foo()
JNIEnv *jEnv = NULL;
cout << "Hello FROM FOO" << endl;
g_jVM->AttachCurrentThreadAsDaemon((void **)(&jEnv), NULL);
if (jEnv == NULL)
std::cout << "n !!! Failed to attach current thread with JVM !!! n";
else
std::cout << "n %%%t JNIEnv attached : " << (void *)jEnv;
g_jVM->DetachCurrentThread();
extern "C"
// Implementation of the native method sayHello()
JNIEXPORT void JNICALL Java_com_home_Main_sayHello(JNIEnv *env, jobject thisObj)
cout << "Hello World from C++!" << endl;
env->GetJavaVM(&g_jVM);
std::thread *first = new std::thread(foo);
return;
java multithreading java-native-interface
add a comment |
I am trying to understand the strange behaviour of JNI Application. I am starting the thread from native JNI dll routine (sayHello), which in its turn when started, tries to attach to JVM thread to acquire the the environment variable. However it seams that it cannot do so unless main thread is exiting. How come? In example below (disregard the thread memory leak) the thread routine foo will succeed to attach to JVM only after Thread.sleep(5000) in main thread; Why is that?
OUTPUT:
Hello World!!!
Hello World from C++!
Hello FROM FOO
Good Bye World!!!
%%% JNIEnv attached : 00000206FF8E7B40
JAVA CODE
package com.home;
public class Main
static
System.loadLibrary("JNITest"); // Load native library hello.dll (Windows) or libhello.so (Unixes)
// at runtime
// This library contains a native method called sayHello()
public static void main(String[] args) throws Exception
// TODO Auto-generated method stub
System.out.println("Hello World!!!");
new Main().sayHello();
Thread.sleep(5000);
System.out.println("Good Bye World!!!");
// Declare an instance native method sayHello() which receives no parameter and returns void
private native void sayHello();
JNI DLL
// JNITest.cpp : Defines the exported functions for the DLL application.
//
#include "com_home_Main.h"
#include "stdafx.h"
#include <iostream>
#include <thread>
static JavaVM *g_jVM = NULL;
using namespace std;
void foo()
JNIEnv *jEnv = NULL;
cout << "Hello FROM FOO" << endl;
g_jVM->AttachCurrentThreadAsDaemon((void **)(&jEnv), NULL);
if (jEnv == NULL)
std::cout << "n !!! Failed to attach current thread with JVM !!! n";
else
std::cout << "n %%%t JNIEnv attached : " << (void *)jEnv;
g_jVM->DetachCurrentThread();
extern "C"
// Implementation of the native method sayHello()
JNIEXPORT void JNICALL Java_com_home_Main_sayHello(JNIEnv *env, jobject thisObj)
cout << "Hello World from C++!" << endl;
env->GetJavaVM(&g_jVM);
std::thread *first = new std::thread(foo);
return;
java multithreading java-native-interface
add a comment |
I am trying to understand the strange behaviour of JNI Application. I am starting the thread from native JNI dll routine (sayHello), which in its turn when started, tries to attach to JVM thread to acquire the the environment variable. However it seams that it cannot do so unless main thread is exiting. How come? In example below (disregard the thread memory leak) the thread routine foo will succeed to attach to JVM only after Thread.sleep(5000) in main thread; Why is that?
OUTPUT:
Hello World!!!
Hello World from C++!
Hello FROM FOO
Good Bye World!!!
%%% JNIEnv attached : 00000206FF8E7B40
JAVA CODE
package com.home;
public class Main
static
System.loadLibrary("JNITest"); // Load native library hello.dll (Windows) or libhello.so (Unixes)
// at runtime
// This library contains a native method called sayHello()
public static void main(String[] args) throws Exception
// TODO Auto-generated method stub
System.out.println("Hello World!!!");
new Main().sayHello();
Thread.sleep(5000);
System.out.println("Good Bye World!!!");
// Declare an instance native method sayHello() which receives no parameter and returns void
private native void sayHello();
JNI DLL
// JNITest.cpp : Defines the exported functions for the DLL application.
//
#include "com_home_Main.h"
#include "stdafx.h"
#include <iostream>
#include <thread>
static JavaVM *g_jVM = NULL;
using namespace std;
void foo()
JNIEnv *jEnv = NULL;
cout << "Hello FROM FOO" << endl;
g_jVM->AttachCurrentThreadAsDaemon((void **)(&jEnv), NULL);
if (jEnv == NULL)
std::cout << "n !!! Failed to attach current thread with JVM !!! n";
else
std::cout << "n %%%t JNIEnv attached : " << (void *)jEnv;
g_jVM->DetachCurrentThread();
extern "C"
// Implementation of the native method sayHello()
JNIEXPORT void JNICALL Java_com_home_Main_sayHello(JNIEnv *env, jobject thisObj)
cout << "Hello World from C++!" << endl;
env->GetJavaVM(&g_jVM);
std::thread *first = new std::thread(foo);
return;
java multithreading java-native-interface
I am trying to understand the strange behaviour of JNI Application. I am starting the thread from native JNI dll routine (sayHello), which in its turn when started, tries to attach to JVM thread to acquire the the environment variable. However it seams that it cannot do so unless main thread is exiting. How come? In example below (disregard the thread memory leak) the thread routine foo will succeed to attach to JVM only after Thread.sleep(5000) in main thread; Why is that?
OUTPUT:
Hello World!!!
Hello World from C++!
Hello FROM FOO
Good Bye World!!!
%%% JNIEnv attached : 00000206FF8E7B40
JAVA CODE
package com.home;
public class Main
static
System.loadLibrary("JNITest"); // Load native library hello.dll (Windows) or libhello.so (Unixes)
// at runtime
// This library contains a native method called sayHello()
public static void main(String[] args) throws Exception
// TODO Auto-generated method stub
System.out.println("Hello World!!!");
new Main().sayHello();
Thread.sleep(5000);
System.out.println("Good Bye World!!!");
// Declare an instance native method sayHello() which receives no parameter and returns void
private native void sayHello();
JNI DLL
// JNITest.cpp : Defines the exported functions for the DLL application.
//
#include "com_home_Main.h"
#include "stdafx.h"
#include <iostream>
#include <thread>
static JavaVM *g_jVM = NULL;
using namespace std;
void foo()
JNIEnv *jEnv = NULL;
cout << "Hello FROM FOO" << endl;
g_jVM->AttachCurrentThreadAsDaemon((void **)(&jEnv), NULL);
if (jEnv == NULL)
std::cout << "n !!! Failed to attach current thread with JVM !!! n";
else
std::cout << "n %%%t JNIEnv attached : " << (void *)jEnv;
g_jVM->DetachCurrentThread();
extern "C"
// Implementation of the native method sayHello()
JNIEXPORT void JNICALL Java_com_home_Main_sayHello(JNIEnv *env, jobject thisObj)
cout << "Hello World from C++!" << endl;
env->GetJavaVM(&g_jVM);
std::thread *first = new std::thread(foo);
return;
java multithreading java-native-interface
java multithreading java-native-interface
edited Mar 25 at 1:32
Boris
asked Mar 25 at 1:20
BorisBoris
566628
566628
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55330205%2fattachcurrentthread-is-stuck-in-jni%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55330205%2fattachcurrentthread-is-stuck-in-jni%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown