> Clipboard is a part of AWT API. The AWT is a multi-threaded GUI toolkit, 
> which means that users can call Clipboard's methods on
> any thread. If we remove invokeLater(), we break this contract, which I'm not 
> sure we want to do.
The FlavorListener and ClipboardOwner interfaces do not state that the 
callbacks would be called on EDT, so at least we are not breaking the spec.
The problem here is that Clipboard would be a  part of a different module and 
must be independent from AWT or the desktop module. Even reflectively 
independent.
This means we have 2 options here: option 1 is implemented in the fix.

Option 2 is to declare some "DelayedNotificationService", make the Clipboard 
look for this service using a ServiceLoader and make AWT implement the service 
using the invokeLater. So if the Clipboard would be used in absence of desktop 
module it would deliver the notifications in place, and with the desktop module 
it will
use the invokeLater. Personally I think that the second option is way more 
fragile and unnecessary complicated. 

The only place where the Clipboard is used directly is in swing's sandbox 
clipboard, but it's used internally and only on EDT. And it does not leak to 
the user.
So if we just remove the invokeLater we would likely not break anything. With 
the second option I would not be so sure.

With best regards. Petr.

On 07.04.2014, at 17:42, Anthony Petrov <[email protected]> wrote:

> Hi Petr,
> 
> Clipboard is a part of AWT API. The AWT is a multi-threaded GUI toolkit, 
> which means that users can call Clipboard's methods on any thread. If we 
> remove invokeLater(), we break this contract, which I'm not sure we want to 
> do.
> 
> --
> best regards,
> Anthony
> 
> On 4/7/2014 5:16 PM, Petr Pchelko wrote:
>> Hello, AWT Team.
>> 
>> Please review the fix for the issue:
>> https://bugs.openjdk.java.net/browse/JDK-8039377
>> The fix is here:
>> http://cr.openjdk.java.net/~pchelko/9/8039377/webrev.00/
>> 
>> The problem: Clipboard depend on the EventQueue. The solution - remove the 
>> invokeLater. The Clipboard object is used only as a Swing sandbox clipboard 
>> which is used from the EDT.
>> The user can't use in as the System clipboard, so there's no worries about 
>> the callback being executed on some privileged thread. So we can simply 
>> remove the invokeLater here.
>> 
>> With best regards. Petr.
>> 

Reply via email to