<AWT Dev> Code review request: 7025699: Policy Tool is not accessible by keyboard
Leif Samuelsson
leif.samuelsson at oracle.com
Tue Oct 15 17:00:45 UTC 2013
Thanks for the good feedback. We will make sure to move to move the
GUI instantiation to the EDT and the file I/O to a worker thread.
All other operations are event driven and therefore occur directly
on the EDT.
Leif
On 2013-10-15 09:56, alexander potochkin wrote:
> Hello
>
>> Well, performing I/O or other blocking operations on EDT can only freeze the app's GUI for the period of blocking. If developers/users are OK with that, this is fine with me too.
>>
>
> I don't think an I/O blocking operation on EDT is acceptable. It can freeze the whole application and give a bad experience to the users.
> Please consider using the SwingWorker API
> http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
>
>
>> However, you should still call all Swing APIs (including creating your components/windows) on the EDT. And I don't see this is being done in your current code. As a minimum, the displayToolWindow() method should be dispatched on the event thread. I haven't examined the code closely, but if there are any other GUI updates from separate threads, those should also be moved to the EDT. See the following tutorial for details:
>>
>> http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html
>>
>
> Indeed, rewriting an AWT app as a Swing app is not only about changing Labels to JLabels
> Please make sure that all Swing code are used on the event dispatching thread only.
>
> Thanks
> alexp
>
>> --
>> best regards,
>> Anthony
>>
>> On 10/15/2013 06:13 PM, Weijun Wang wrote:
>>> Policy Tool is a GUI editor for the plain text policy file. The only I/O
>>> is loading the policy file from disk and it should be quite small, so I
>>> think there won't be a problem here.
>>>
>>> Thanks
>>> Max
>>>
>>> On 10/15/13 8:08 PM, Anthony Petrov wrote:
>>>> Hi Max,
>>>>
>>>> I don't have expertise in this code so I haven't reviewed the fix
>>>> thoroughly. I'd like to point out one thing though: unlike AWT, Swing is
>>>> a single-threaded GUI toolkit. While in AWT you can create
>>>> components/windows and call APIs on any thread, in Swing everything
>>>> GUI-related must be performed on the Event Dispatch Thread (EDT) only.
>>>> Any long, non-GUI-related operations (like I/O, computations, etc.)
>>>> should be dispatched on other threads (with a SwingWorker, for example).
>>>>
>>>> I don't see a single SwingUtilities.invokeLater/invokeAndWait() call in
>>>> PolicyTool.java, so I thought I'd ask whether you're aware of the
>>>> threading limitations imposed by Swing and how those are going to be
>>>> addressed?
>>>>
>>>> --
>>>> best regards,
>>>> Anthony
>>>>
>>>> On 10/12/2013 04:49 AM, Weijun Wang wrote:
>>>>> Hi All
>>>>>
>>>>> Please review the fix at
>>>>>
>>>>> http://cr.openjdk.java.net/~weijun/7025699/webrev.00/
>>>>>
>>>>> The fix includes porting PolicyTool from AWT to Swing, defining
>>>>> mnemonics for menu items and buttons, and adding keyboard shortcuts for
>>>>> the File -> New/Open/Save items. Several tests are updated also.
>>>>>
>>>>> Thanks
>>>>> Max
>
More information about the security-dev
mailing list