[OpenJDK 2D-Dev] FontConfig fails when optional system library is missing

Phil Race philip.race at oracle.com
Tue Jul 19 16:29:19 UTC 2011


PS .. are you running a pure openjdk build or are you running a build which
includes the proprietary Lucida fonts.
Do you have a  fontconfig.properties which is customised for AIX ?

If you eliminate both of those, as would be the typical Linux OpenJDK case,
I think it quite likely that without libfontconfig you'll see JDK fall 
flat on
its face due to not being able to locate any fonts at all.

-phil.

On 7/18/2011 5:06 PM, Phil Race wrote:
> On 7/18/11 4:13 PM, Steve Poole wrote:
>> On 18/07/11 23:14, Phil Race wrote:
>>> Ah you said it was AIX, not Linux. Still,  it should have that 
>>> library installed
>>> even if the de-ref is fixed.
>>>
>> Not on AIX - its completely optional - and as far we can tell (other 
>> than this particular problem) nothing else bad happens.
> If that's optional I assume a lot more is optional that needs to be 
> installed
> for a GUI app. But JDK on all unix flavours is very reliant on 
> fontconfig to find
> font files. I suggest to make fontconfig a pre-requisite for Java on 
> AIX. Even server
> apps use fonts more often than you'd expect.
>
> I didn't mean to just "cc" 2d, but to disconnect the discussion from 
> core-libs
> since its not related to core-libs in way at all.
> Yes, its 2d because its font, I'm actually surprised that is a 
> surprise ...
>
> -phil.
>
>>   Having said that I would expect customers to install the package - 
>> this fix is simply a belt and braces change.
>> I don't know why the attachment is missing  - here it is inline:
>> ---
>> diff --git a/src/solaris/classes/sun/font/FontConfigManager.java 
>> b/src/solaris/classes/sun/font/FontConfigManager.java
>> --- a/src/solaris/classes/sun/font/FontConfigManager.java
>> +++ b/src/solaris/classes/sun/font/FontConfigManager.java
>> @@ -348,6 +348,8 @@
>>
>>          initFontConfigFonts(false);
>>
>> +    if(fontConfigFonts==null) return null; // init failed
>> +
>>          FcCompFont fcInfo = null;
>>          for (int i=0; i<fontConfigFonts.length; i++) {
>>              if (name.equals(fontConfigFonts[i].fcFamily) &&
>> ---
>>
>> By the way - why is this 2d?  because it's font?    Anyway I've cc'd 
>> 2d-dev as you suggest.  Thanks for the quick response.
>>
>>
>>> -phil.
>>>
>>> On 7/18/2011 3:12 PM, Phil Race wrote:
>>>> Steve,
>>>>
>>>> There's no attachment .. and this should be discussed on 2d-dev, 
>>>> not core-libs.
>>>>
>>>> I do see in the code where the null de-ref can happen. This is some 
>>>> new JDK 7 code.
>>>> Although a system where the library is missing is basically DOA for 
>>>> client use.
>>>> I'd suspect you are running 32 bit JDK on a 64 bit Linux which 
>>>> hasn't had
>>>> the 32 bit libs installed. If so, likely you'll run into other 
>>>> problems too.
>>>>
>>>> -phil.
>>>>
>>>>
>>>> On 7/18/2011 2:37 PM, Steve Poole wrote:
>>>>>
>>>>> Hi all, a problem was discovered on JDK7 when using the Nimbus L&F 
>>>>> on a system where libfontconfig.so was not installed (On AIX 
>>>>> actually but in theory on any unix system)
>>>>>
>>>>> Under the covers Nimbus uses the sun.font.FontConfigManager to 
>>>>> retrieve fonts. sun.font.FontConfigManager in turn is intended to 
>>>>> use (for a unix system) the libfontconfig.so system library if 
>>>>> present.
>>>>>
>>>>> The code is intended to cope with the library being missing but it 
>>>>> unfortunately doesn't. A array is referenced without checking if 
>>>>> it is null. On systems where the system library is present this 
>>>>> array is never null but in this specific case the array is null 
>>>>> and the reference fails as follows.
>>>>>
>>>>>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>> at 
>>>>> sun.font.FontConfigManager.getFontConfigFont(FontConfigManager.java:352) 
>>>>>
>>>>> at sun.awt.X11FontManager.getFontConfigFUIR(X11FontManager.java:817)
>>>>> at sun.font.FontUtilities.getFontConfigFUIR(FontUtilities.java:472)
>>>>> at 
>>>>> javax.swing.plaf.nimbus.NimbusDefaults.<init>(NimbusDefaults.java:138)
>>>>> at 
>>>>> javax.swing.plaf.nimbus.NimbusLookAndFeel.<init>(NimbusLookAndFeel.java:100)
>>>>> at Nimbus.main(Nimbus.java:6)
>>>>>>>>>>
>>>>> The fix is trivial (see attached) and probably just tactical.
>>>>>
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Steve
>>>>>
>>>>
>>>
>>
>




More information about the 2d-dev mailing list