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



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

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

handleGetURLEvent是我的处理器方法。

如果我不启动JVM线程,则调用处理程序。如果我启动JVM线程,并且在JVM中运行的Java应用程序达到初始化AWT GUI的地步,则不会调用处理程序。什么好主意吗?

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

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

最新更新