Java 7 and Application.setOpenURIHandler
James Tomson
james.b.tomson at gmail.com
Thu May 23 12:00:56 PDT 2013
Thanks Sean - I've started a new discussion in the awt-dev list here:
http://mail.openjdk.java.net/pipermail/awt-dev/2013-May/004835.html
Cheers,
James
On Thu, May 23, 2013 at 11:50 AM, Seán Coffey <sean.coffey at oracle.com>wrote:
> James, AJ,
>
> I've moved the bug report into the JDK category. It should be appearing
> with new ID shortly (JDK-8015302)
> http://bugs.sun.com/**bugdatabase/view_bug.do?bug_**id=8015302<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8015302>
>
> I suggest you discuss the issue with the awt-dev mailing list first. (I
> think this issue falls into that area). Ideally you could propose a patch
> for JDK8 first and then backport to jdk7u. Details on how to contribute can
> be found at : http://openjdk.java.net/**contribute/<http://openjdk.java.net/contribute/>
>
> regards,
> Sean.
>
>
> On 22/05/2013 22:52, James Tomson wrote:
>
>> I've run into this issue as well with jdk7u_21, and just entered (another)
>> bug on the subject - 9003054.
>>
>> Looking at the system log in Console.app when this occurs, there's a but
>> more info in the exception description:
>>
>> ----------
>> JavaAppLauncher[74278]: -[NSAppleEventDescriptor
>> paramDescriptorForKeyword:] called on invalid NSAppleEventDescriptor
>> ----------
>>
>> It appears that since the QueueingApplicationDelegate is only keeping
>> references to those event objects instead of making deep copies of them,
>> the event descriptor for the initial URI that launches the app is
>> invalidated by the time the app actually gets around to processing it.
>>
>> The following patch seems to resolve the issue:
>> -----------
>> diff -r fd2743154fcf
>> src/macosx/native/sun/osxapp/**QueuingApplicationDelegate.m
>> --- a/src/macosx/native/sun/**osxapp/**QueuingApplicationDelegate.m
>> Wed May
>> 08 16:52:22 2013 -0700
>> +++ b/src/macosx/native/sun/**osxapp/**QueuingApplicationDelegate.m
>> Wed May
>> 22 12:41:08 2013 -0400
>> @@ -110,8 +110,14 @@
>>
>> - (void)_handleOpenURLEvent:(**NSAppleEventDescriptor *)openURLEvent
>> withReplyEvent:(**NSAppleEventDescriptor *)replyEvent
>> {
>> + // Make an explicit copy of the passed events as they may be
>> invalidated by the time they're processed
>> + NSAppleEventDescriptor *openURLEventCopy = [openURLEvent copy];
>> + NSAppleEventDescriptor *replyEventCopy = [replyEvent copy];
>> +
>> [self.queue addObject:[^(){
>> - [self.realDelegate _handleOpenURLEvent:**openURLEvent
>> withReplyEvent:replyEvent];
>> + [self.realDelegate _handleOpenURLEvent:**openURLEventCopy
>> withReplyEvent:replyEventCopy]**;
>> + [openURLEventCopy release];
>> + [replyEventCopy release];
>> } copy]];
>> }
>> -----------
>>
>> I'm not quite sure of the process required to get these patches
>> considered,
>> but I've included the above diff in the bug report - hopefully it's of
>> some
>> use and not completely off track :)
>>
>> -James
>>
>> I submitted a bug for this but it's been "not available" for a few weeks:
>>> http://bugs.sun.com/**bugdatabase/view_bug.do?bug_**id=9000081<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=9000081>
>>>
>>> Can anybody comment on this issue with the
>>> Application.setOpenURIHandler and custom protocols?
>>>
>>> Custom protocols really are useful especially now that applets are
>>> dying a slow death with everybody disabling java in their browser...
>>>
>>> Thanks,
>>> -Aj
>>>
>>>
>>> On Mon, Feb 18, 2013 at 7:28 PM, AJ Gregory <ajgregory at gmail.com>
>>> wrote:
>>>
>>>> I have an app bundled with Java 7 (1.7.0_13) which registers a custom
>>>> URL scheme using CFBundleURLSchemes in it's Info.plist and uses the
>>>> Application.setOpenURIHandler to register a listener.
>>>>
>>>> When I click on a link that has the custom URL scheme in the browser
>>>> it launches the app OK but doesn't call the handler and the following
>>>> dump is in the console.
>>>>
>>>> I tried to submitted a bug as well but never got a bug number so not
>>>> sure if it was created.
>>>>
>>>> Anybody else have experience with this?
>>>>
>>>> Thanks,
>>>> -Aj
>>>>
>>>>
>>>>
>>>> 2/6/13 8:46:21.473 AM JavaAppLauncher[842]: (
>>>> 0 CoreFoundation 0x00007fff898200a6
>>>> __exceptionPreprocess + 198
>>>> 1 libobjc.A.dylib 0x00007fff840043f0
>>>> objc_exception_throw + 43
>>>> 2 CoreFoundation 0x00007fff8981fe7c
>>>> +[NSException raise:format:] + 204
>>>> 3 Foundation 0x00007fff8c29f763
>>>> -[NSAppleEventDescriptor paramDescriptorForKeyword:] + 71
>>>> 4 liblwawt.dylib 0x0000000168fb2b77
>>>> -[ApplicationDelegate _handleOpenURLEvent:
>>>> withReplyEvent:] + 137
>>>> 5 libosxapp.dylib 0x00000001690588b1
>>>> __-[QueuingApplicationDelegate
>>>> _handleOpenURLEvent:**withReplyEvent:]_block_invoke_**1 + 135
>>>> 6 libosxapp.dylib 0x00000001690597bf
>>>> -[QueuingApplicationDelegate processQueuedEventsWithTargetD**elegate:]
>>>> +
>>>> 134
>>>> 7 libosxapp.dylib 0x0000000169057857
>>>> OSXAPP_SetApplicationDelegate + 153
>>>> 8 liblwawt.dylib 0x0000000168fb1899
>>>> __+[AWTStarter start:swtMode:**swtModeForWebStart:]_block_**invoke_1 +
>>>> 111
>>>> 9 Foundation 0x00007fff8c2cf677
>>>> __NSThreadPerformPerform + 225
>>>> 10 CoreFoundation 0x00007fff8979f101
>>>> __CFRUNLOOP_IS_CALLING_OUT_TO_**A_SOURCE0_PERFORM_FUNCTION__ + 17
>>>> 11 CoreFoundation 0x00007fff8979ea25
>>>> __CFRunLoopDoSources0 + 245
>>>> 12 CoreFoundation 0x00007fff897c1dc5
>>>> __CFRunLoopRun + 789
>>>> 13 CoreFoundation 0x00007fff897c16b2
>>>> CFRunLoopRunSpecific + 290
>>>> 14 HIToolbox 0x00007fff872880a4
>>>> RunCurrentEventLoopInMode + 209
>>>> 15 HIToolbox 0x00007fff87287d84
>>>> ReceiveNextEventCommon + 166
>>>> 16 HIToolbox 0x00007fff87287cd3
>>>> BlockUntilNextEventMatchingLis**tInMode + 62
>>>> 17 AppKit 0x00007fff8e331613
>>>> _DPSNextEvent + 685
>>>> 18 AppKit 0x00007fff8e330ed2
>>>> -[NSApplication nextEventMatchingMask:**untilDate:inMode:dequeue:] +
>>>> 128
>>>> 19 libosxapp.dylib 0x0000000169057b56
>>>> -[NSApplicationAWT nextEventMatchingMask:**untilDate:inMode:dequeue:] +
>>>> 124
>>>> 20 AppKit 0x00007fff8e328283
>>>> -[NSApplication run] + 517
>>>> 21 libosxapp.dylib 0x00000001690579b9
>>>> +[NSApplicationAWT runAWTLoopWithApp:] + 156
>>>> 22 liblwawt.dylib 0x0000000168fb181a
>>>> -[AWTStarter starter:] + 1591
>>>> 23 Foundation 0x00007fff8c2cf677
>>>> __NSThreadPerformPerform + 225
>>>> 24 CoreFoundation 0x00007fff8979f101
>>>> __CFRUNLOOP_IS_CALLING_OUT_TO_**A_SOURCE0_PERFORM_FUNCTION__ + 17
>>>> 25 CoreFoundation 0x00007fff8979ea25
>>>> __CFRunLoopDoSources0 + 245
>>>> 26 CoreFoundation 0x00007fff897c1dc5
>>>> __CFRunLoopRun + 789
>>>> 27 CoreFoundation 0x00007fff897c16b2
>>>> CFRunLoopRunSpecific + 290
>>>> 28 libjli.dylib 0x00000001001cb88d
>>>> CreateExecutionEnvironment + 871
>>>> 29 libjli.dylib 0x00000001001c603c
>>>>
>>> JLI_Launch + 1952
>>
>>> 30 JavaAppLauncher 0x00000001000629cb launch +
>>>>
>>> 5035
>>
>>> 31 JavaAppLauncher 0x00000001000614f6 main +
>>>> 102
>>>> 32 JavaAppLauncher 0x0000000100061484 start +
>>>> 52
>>>> 33 ??? 0x0000000000000002 0x0 + 2
>>>> )>
>>>>
>>>
>
More information about the jdk7u-dev
mailing list