目标C应用程序的kAEGetURL事件处理程序在启动第二个线程后未被调用

时间:2015-07-27 17:33:59

标签: java objective-c java-native-interface

我有一个Cocoa应用程序,它在单独的线程中运行Java虚拟机(通过JNI)。该应用程序注册事件处理程序以处理URL协议myprotocol://。注册是这样实现的:

$success->next_result();
$success->free_result();

handleGetURLEvent是我的处理程序方法。

如果我没有启动JVM线程,则会调用处理程序。如果我启动JVM线程并且在JVM中运行的Java应用程序达到初始化AWT gui的程度,则不会调用处理程序。任何想法?

1 个答案:

答案 0 :(得分:0)

我已经解决了。 Java在加载Swing / AWT后将其自身安装为AppleEvents的目标。不知道为什么。它刚刚取代了我的事件处理程序我只是在Java设置之后再次设置我的事件处理程序(替换Java的一个)。我使用此代码设置事件处理程序:

NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];

[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];