当前位置: 代码迷 >> java >> 启动第二个线程后未调用Objective-C应用程序的kAEGetURL事件处理程序
  详细解决方案

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

热度:98   发布时间:2023-08-02 11:18:28.0

我有一个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的地步,则不会调用该处理程序。 有任何想法吗?

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

NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];

[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
  相关解决方案