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







Reply via email to