<AWT Dev> [9] Review request for 8151189: Possible getAppContext() NPE in java.awt.Desktop and java.awt.Taskbar
Alexander Zvegintsev
alexander.zvegintsev at oracle.com
Mon Nov 21 07:01:28 UTC 2016
I forgot to save an instance of the Desktop class to the static variable.
http://cr.openjdk.java.net/~azvegint/jdk/9/8151189/01/
Thanks,
Alexander.
On 11/16/16 12:16 AM, Phil Race wrote:
> A "main" appcontext will be created if you are a standalone app, but
> not if running in webstart (although the means of determining that is
> somewhat hokey) :-
> if (numAppContexts.get() == 0) {
> if
> (System.getProperty("javaplugin.version") == null &&
> System.getProperty("javawebstart.version") == null) {
> initMainAppContext();
>
> So if that is not initialised it appears to rely solely on an
> appcontext being
> associated with the current threadgroup - or a parent threadgroup.
>
> If for some reason this does not return an appcontext you'll get the NPE.
> This doesn't have to mean it is the Toolkit thread.
> This example may be a little contrived but it illustrates the problem :-
> If the webstart system property is set you will never see "got
> desktop" printed
> because the finalizer thread gets an exception.
>
> ===
> import java.awt.Desktop;
>
> public class GD {
>
> public void finalize() {
> System.out.println("get desktop");
> System.out.println(Desktop.getDesktop());
> System.out.println("got desktop");
> }
>
> public static void main(String[] args) {
> if (args.length == 0) {
> System.out.println("Setting webstart version");
> System.setProperty("javawebstart.version", "8");
> }
> while (true) {
> new GD();
> System.gc();
> }
> }
> }
> ====
>
> -phil.
>
> On 11/15/2016 10:48 AM, Phil Race wrote:
>> So are you saying we will never call this from the Toolkit thread, so
>> provably
>> there will never be an NPE ?
>>
>> Seems we have had a ton of NPE bugs from getAppContext() returning null
>> so I am not so confident about that.
>>
>> -phil.
>>
>> On 11/15/2016 10:44 AM, Sergey Bylokhov wrote:
>>> I guess this should be closed as not a defect. getAppContext() can
>>> return null if it will be called from the toolkit thread. If this
>>> method is called by the user then appcontext should not be null,
>>> additionally we should not cache this value in the static, so all
>>> other code will use this cached static value.
>>>
>>> On 15.11.16 20:38, Phil Race wrote:
>>>>
>>>> +1
>>>>
>>>> -phil.
>>>>
>>>> On 11/15/2016 08:24 AM, Alexander Zvegintsev wrote:
>>>>> Hello,
>>>>>
>>>>> please review the fix
>>>>>
>>>>> http://cr.openjdk.java.net/~azvegint/jdk/9/8151189/00/
>>>>>
>>>>> for the issue
>>>>>
>>>>> https://bugs.openjdk.java.net/browse/JDK-8151189
>>>>>
>>>>
>>>
>>>
>>
>
More information about the awt-dev
mailing list