On 9/16/2016 1:32 PM, Sergey Bylokhov wrote:
On 15.09.16 14:48, Anton Tarasov wrote:
Yes, and my suggestion was to use the new method and default values
everywhere instead of invokeAndWait(Callable,Component).
But the default value for a reference would be null, there's no need to
request something else, unlike for primitive wrappers.
Or your idea is to force passing a def value anyway?
If the references like Point from getLocationOnScreen() can be null,
then ok. looks fine.
Yes, it can.
On 15.09.16 12:45, Anton Tarasov wrote:
Please review the fix:
(The bug is currently closed as “not an issue”, which is not quite
So once and if the fix is approved I can take the ownership of the
The problem is this. Sometimes when a frame is closed there may
- removeNotify() is called on the frame on EDT and it removes all
events associated with the frame from the event queue.
- The frame is requested by accessibility via the CAccessibility
methods (like CAccessibility.getAccessibleIndexInParent). Those
are called from native on AppKit thread and they perform via
invokeAndWait. The latter is wrapped with an InvocationEvent whose
source is set to the frame. But, once the event is put on the event
queue, it's purged by the removeNotify() call. As the result,
invokeAndWait returns null. Then, in some of the mentioned methods
'null' is unboxed to a primitive 'int' or 'boolean' which results
propagated to native. On the native side, the NPE is not properly
handled and is just re-thrown.
I don't have a simple and safe solution for the race. So, I
fix the NPE/crash at least.