问题描述
我有一个Cocoa应用程序(通过JNI)在单独的线程中运行Java虚拟机。
该应用程序注册事件处理程序以处理URL协议myprotocol://
。
注册是这样实现的:
NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
handleGetURLEvent
是我的处理程序方法。
如果我不启动JVM线程,则调用处理程序。 如果我启动JVM线程,并且在JVM中运行的Java应用程序到达初始化AWT GUI的地步,则不会调用该处理程序。 有任何想法吗?
1楼
我已经解决了 Java在加载Swing / AWT之后将自身安装为AppleEvents的目标。 不知道为什么。 它只是替换了我的事件处理程序。 在Java设置事件处理程序之后,我再次设置了事件处理程序(替换Java的事件处理程序)。 我使用以下代码设置事件处理程序:
NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];