17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 #import <AppKit/AppKit.h>
27 #import <JavaNativeFoundation/JavaNativeFoundation.h>
28 #import <objc/message.h>
29
30 #import "ThreadUtilities.h"
31
32
33 // The following must be named "jvm", as there are extern references to it in AWT
34 JavaVM *jvm = NULL;
35 static JNIEnv *appKitEnv = NULL;
36 static jobject appkitThreadGroup = NULL;
37 static BOOL awtEmbedded = NO;
38
39 static inline void attachCurrentThread(void** env) {
40 if ([NSThread isMainThread]) {
41 JavaVMAttachArgs args;
42 args.version = JNI_VERSION_1_4;
43 args.name = "AppKit Thread";
44 args.group = appkitThreadGroup;
45 (*jvm)->AttachCurrentThreadAsDaemon(jvm, env, &args);
46 } else {
47 (*jvm)->AttachCurrentThreadAsDaemon(jvm, env, NULL);
48 }
49 }
50
51 @implementation ThreadUtilities
52
53 + (JNIEnv*)getJNIEnv {
54 AWT_ASSERT_APPKIT_THREAD;
55 if (appKitEnv == NULL) {
56 attachCurrentThread((void **)&appKitEnv);
57 }
71 + (void)setAppkitThreadGroup:(jobject)group {
72 appkitThreadGroup = group;
73 }
74
75 + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block {
76 if ([NSThread isMainThread] && wait == YES) {
77 block();
78 } else {
79 [JNFRunLoop performOnMainThreadWaiting:wait withBlock:block];
80 }
81 }
82
83 + (void)performOnMainThread:(SEL)aSelector on:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait {
84 if ([NSThread isMainThread] && wait == YES) {
85 [target performSelector:aSelector withObject:arg];
86 } else {
87 [JNFRunLoop performOnMainThread:aSelector on:target withObject:arg waitUntilDone:wait];
88 }
89 }
90
91 + (void)setAWTEmbedded:(BOOL)embedded {
92 awtEmbedded = embedded;
93 }
94
95 + (BOOL)isAWTEmbedded {
96 return awtEmbedded;
97 }
98
99 @end
100
101
102 void OSXAPP_SetJavaVM(JavaVM *vm)
103 {
104 jvm = vm;
105 }
106
|
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 #import <AppKit/AppKit.h>
27 #import <JavaNativeFoundation/JavaNativeFoundation.h>
28 #import <objc/message.h>
29
30 #import "ThreadUtilities.h"
31
32
33 // The following must be named "jvm", as there are extern references to it in AWT
34 JavaVM *jvm = NULL;
35 static JNIEnv *appKitEnv = NULL;
36 static jobject appkitThreadGroup = NULL;
37
38 static inline void attachCurrentThread(void** env) {
39 if ([NSThread isMainThread]) {
40 JavaVMAttachArgs args;
41 args.version = JNI_VERSION_1_4;
42 args.name = "AppKit Thread";
43 args.group = appkitThreadGroup;
44 (*jvm)->AttachCurrentThreadAsDaemon(jvm, env, &args);
45 } else {
46 (*jvm)->AttachCurrentThreadAsDaemon(jvm, env, NULL);
47 }
48 }
49
50 @implementation ThreadUtilities
51
52 + (JNIEnv*)getJNIEnv {
53 AWT_ASSERT_APPKIT_THREAD;
54 if (appKitEnv == NULL) {
55 attachCurrentThread((void **)&appKitEnv);
56 }
70 + (void)setAppkitThreadGroup:(jobject)group {
71 appkitThreadGroup = group;
72 }
73
74 + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block {
75 if ([NSThread isMainThread] && wait == YES) {
76 block();
77 } else {
78 [JNFRunLoop performOnMainThreadWaiting:wait withBlock:block];
79 }
80 }
81
82 + (void)performOnMainThread:(SEL)aSelector on:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait {
83 if ([NSThread isMainThread] && wait == YES) {
84 [target performSelector:aSelector withObject:arg];
85 } else {
86 [JNFRunLoop performOnMainThread:aSelector on:target withObject:arg waitUntilDone:wait];
87 }
88 }
89
90 @end
91
92
93 void OSXAPP_SetJavaVM(JavaVM *vm)
94 {
95 jvm = vm;
96 }
97
|