<Swing Dev> Unexpected NullPointerException by endComposition()
Pavel Porvatov
pavel.porvatov at oracle.com
Fri Oct 14 08:06:31 UTC 2011
Hi Charles,
> On 10/11/2011 05:50 PM, Pavel Porvatov wrote:
>> Hi Charles,
>>> On 10/08/2011 05:41 PM, Pavel Porvatov wrote:
>>> I got your point. What about this solution:
>>> If in the compose mode, endCompositoin just sendComposedText instead
>>> of sendCommittedText.
>>>
>>> The patch is attached
>>>
>> Could you please explain the fix? May be it removes NPE but it
>> puzzles me. So if buffer.length() == 0 you invoke sendCommittedText,
>> right? But sendCommittedText commits buffer, but buffer is empty.
>> Looks strange...
>>
>> BTW: the code like "if (!notInCompositionMode) {" a little bit
>> difficult to understand =) I'd preffer to avoid two negations and use
>> "if (notInCompositionMode)" and swap if/else blocks...
>>
>> Regards, Pavel
>>
> Hi Pavel,
>
> Sorry for the confusion. Here is some explanation, please correct me
> if I am wrong:
> 1. There two modes which is judge from the buffer size: composed mode
> when the buffer size is not zero and normal mode when the buffer size
> is zero.
Right
> 2. The original code make no difference whether it is in the composed
> mode or normal mode. In the normal mode, which buffer size is zero, it
> sends the committed text. In the composed mode, which buffer size is
> not zero, it also sends the committed code. And NPE occurred here.
> 3. In the patch, I do not change the logic when in the normal mode.
> (notInCompositionMode branch) Why? I guess it is the logic of "Ends
> any input composition that may currently be going on in this context.
> Depending on the platform and possibly user preferences, this may
> commit or delete uncommitted text." from the api spec....
Yes. But after your change the following code looks strange for me:
if (!notInCompositionMode) {
....
} else {
>>>> sendCommittedText();
}
So if we are not in composition mode we send something (empty string
actually). Logically we shouldn't send anything (IMO), because buffer is
empty. Why should we do something at all if endComposition is invoked
and we are not in composition mode?
> 4. In the patch, the logic in the composed mode is that: if it is in
> the composed mode, keep every thing as just composed :-)
I found a new bug (???) in the fix. If you apply the patch, run the
MouseEventTest2 test and follow the instructions from the bug
description NPE will not be thrown, but the JTextArea remains in
composition mode even after endComposition completion.
Regards, Pavel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20111014/9ade559e/attachment.html>
More information about the swing-dev
mailing list