Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 5004298
Votes 2
Synopsis Running in Headless mode still produces Headless exception with GTK UI
Category java:classes_swing
Reported Against 1.4.2
Release Fixed 7(b03)
State 10-Fix Delivered, bug
Priority: 4-Low
Related Bugs
Submit Date 26-FEB-2004
Description


FULL PRODUCT VERSION :
java version "1.4.2_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_01-b06)
Java HotSpot(TM) Client VM (build 1.4.2_01-b06, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Linux 2.4.20-gentoo-r6

EXTRA RELEVANT SYSTEM CONFIGURATION :
Console only - X has been turned off.

A DESCRIPTION OF THE PROBLEM :
The server is running Java in headless mode, ie,  -Djava.awt.headless=true

Using a JPanel in our image conversion tool attempts to use the GTK look and feel.  Pango then attempts to call sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(...), which throws a Headless exception.

This should not be the case since the headless=true option was on the command line.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Get a linux server.

Compile the test  case below.

%java -Djava.awt.headless=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel Test

I have a properties file which stipulates that the GTK look and feel should be used for all java apps, and this is why the original command would not work for me.


EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
For the application to terminate normally.
ACTUAL -
ExceptionInInitializerError is thrown.

See the below stack trace.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.ExceptionInInitializerError
     at com.sun.java.swing.plaf.gtk.GTKLookAndFeel.handleParsedData(GTKLookAndFeel.java:353)
     at com.sun.java.swing.plaf.gtk.GTKLookAndFeel.access$100(GTKLookAndFeel.java:23)
     at com.sun.java.swing.plaf.gtk.GTKLookAndFeel$1.run(GTKLookAndFeel.java:270)
     at java.security.AccessController.doPrivileged(Native Method)
     at com.sun.java.swing.plaf.gtk.GTKLookAndFeel.loadStylesFromThemeFiles(GTKLookAndFeel.java:205)
     at com.sun.java.swing.plaf.gtk.GTKLookAndFeel.initialize(GTKLookAndFeel.java:181)
     at javax.swing.UIManager.setLookAndFeel(UIManager.java:393)
     at javax.swing.UIManager.setLookAndFeel(UIManager.java:424)
     at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1085)
     at javax.swing.UIManager.initialize(UIManager.java:1181)
     at javax.swing.UIManager.maybeInitialize(UIManager.java:1164)
     at javax.swing.UIManager.getUI(UIManager.java:775)
     at javax.swing.JPanel.updateUI(JPanel.java:104)
     at javax.swing.JPanel.<init>(JPanel.java:64)
     at javax.swing.JPanel.<init>(JPanel.java:87)
     at javax.swing.JPanel.<init>(JPanel.java:95)
     at Test.main(Test.java:8)
Caused by: java.awt.HeadlessException
     at sun.java2d.HeadlessGraphicsEnvironment.getDefaultScreenDevice(HeadlessGraphicsEnvironment.java:66)
     at com.sun.java.swing.plaf.gtk.PangoFonts.<clinit>(PangoFonts.java:36)
     ... 17 more

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------

import javax.swing.JPanel;

public class Test
{
    public static void main(String[] args)
    {
        JPanel p = new JPanel();
    }
}


---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Don't use a JPanel, or run with X turned on!!
(Incident Review ID: 239279) 
======================================================================
  xxxxx@xxxxx   11/3/04 18:34 GMT
Work Around
N/A
Evaluation


Not reproducible with 1.5.0-beta-b32.


======================================================================
  xxxxx@xxxxx   11/3/04 18:34 GMT
Contribution-Forum:https://jdk-collaboration.dev.java.net/servlets/ProjectForumMessageView?messageID=11673&forumID=1463
Posted Date : 2006-02-27 20:09:23.0
Comments
  
  Include a link with my name & email   

Submitted On 02-NOV-2004
jkreska
Here is a test case tha reproduces the problem on jdk 1.5.0

import javax.swing.*;
import java.awt.*;

public class Headless {
    public static void main( String[] args ) {
        java.awt.image.BufferedImage img;
        try {
            img = new java.awt.image.BufferedImage( 10, 10, java.awt.image.BufferedImage.TYPE_INT_ARGB );
            System.out.println( "Got image object ... ok" );

            Graphics2D graphics = img.createGraphics();
            System.out.println( "Got Graphics 2D ... ok" );

            graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
            System.out.println( "Graphics setRenderingHint ... ok" );
            graphics.setColor( Color.white );
            System.out.println( "Graphics setColor ... ok" );
            graphics.fillRect( 0, 0, 600, 400 );
            System.out.println( "Graphics fillRect ... ok" );

            JComponent comp = new JPanel();
            System.out.println( "Get Panel ... ok" );

            comp.setBounds( 0, 0, 600, 400 );
            System.out.println( "setBounds ... ok" );

            // Un-comment the following line to allow it work on jdk1.4.2 and jdk1.5.0 
            //comp.setDoubleBuffered(  false );
            comp.paint( graphics );
            System.out.println( "Paint worked ... ok" );
        }
        catch ( Exception e ) {
            e.printStackTrace();
            System.exit( 1 );
        }
        System.exit( 0 );
    }
}



PLEASE NOTE: JDK6 is formerly known as Project Mustang