RFR: 8039432 demo/jvmti/mtrace/TraceJFrame.java can't connect	to X11
    shanliang 
    shanliang.jiang at oracle.com
       
    Tue Apr  8 20:10:10 UTC 2014
    
    
  
Hi Staffan,
I did work on this bug and I thought the problem was from a bad DISPLAY 
setting (see my comments in the bug), I might miss something here.
I looked at the class GraphicsEnvironment.java, 
getLocalGraphicsEnvironment() calls createGE(), and the latter has the 
following code:
            Class<GraphicsEnvironment> geCls;
             ......
            ge = geCls.newInstance();
//          long t1 = System.currentTimeMillis();
//          System.out.println("GE creation took " + (t1-t0)+ "ms.");
            if (isHeadless()) {
                ge = new HeadlessGraphicsEnvironment(ge);
            }
so we should not get an AWTError in case of headless, instead we get a 
HeadlessGraphicsEnvironment.
Look at the following 2 methods:
    public static boolean isHeadless() {
        return getHeadlessProperty();
    }
    public boolean isHeadlessInstance() {
        // By default (local graphics environment), simply check the
        // headless property.
        return getHeadlessProperty();
    }
it seems no difference to call
    GraphicsEnvironment.getLocalGraphicsEnvironement().isHeadlessInstance()
and
    GraphicsEnvironment.isHeadless()   
yes better to cal the static method, but I am not sure that the direct 
call would fix the failure.
Thanks,
Shanliang
Staffan Larsen wrote:
> This test causes exceptions that looks like this:
>
> java.awt.AWTError: Can't connect to X11 window server using ‘REDACTED:503' as the value of the DISPLAY variable.
> 	at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
> 	at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65)
> 	at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:115)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74)
> 	at java.lang.Class.forName0(Native Method)
> 	at java.lang.Class.forName(Class.java:259)
> 	at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102)
> 	at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81)
> 	at TraceJFrame.main(TraceJFrame.java:39)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:484)
> 	at com.sun.javatest.regtest.MainAction$SameVMRunnable.run(MainAction.java:754)
> 	at java.lang.Thread.run(Thread.java:744)
>
>
> The fix seems to be to not call GraphicsEnvironment.getLocalGraphicsEnvironement().isHeadlessInstance() but GraphicsEnvironment.isHeadless() directly.
>
> Please review the fix below,
>
> Thanks,
> /Staffan
>
>
>
> diff --git a/test/demo/jvmti/mtrace/TraceJFrame.java b/test/demo/jvmti/mtrace/TraceJFrame.java
> --- a/test/demo/jvmti/mtrace/TraceJFrame.java
> +++ b/test/demo/jvmti/mtrace/TraceJFrame.java
> @@ -36,7 +36,7 @@
>
>  public class TraceJFrame {
>      public static void main(String args[]) throws Exception {
> -        if (GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance()) {
> +        if (GraphicsEnvironment.isHeadless()) {
>              System.out.println("JFrame test was skipped due to headless mode");
>          } else {
>              DemoRun demo;
    
    
More information about the serviceability-dev
mailing list