<AWT Dev> [9] Review request for 8151189: Possible getAppContext() NPE in java.awt.Desktop and java.awt.Taskbar

Phil Race philip.race at oracle.com
Tue Nov 15 21:16:15 UTC 2016


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