Well this seems like a really narrow use case for an extremely rare system
misconfiguration. It wouldn't help the 99.999% of apps which expect to
kick off AWT or Swing.

And can you ensure that nothing in the app, or in the implementation makes
the (reasonable) expectation that there are other fonts installed ?
The most you could do is render to a BufferedImage or similar using the explicitly loaded font. The default logical font installed on a SG2D will be backed by a non-existent
physical font, so you'd need to swap that in sooner rather than later.

At some point you have to say that if JRE or system components are missing,
then the source of the problem is what you should fix rather than make the
JRE work around it.

If you do want to try something, then in this case you get a much more usable
runtime by providing a default font that the JRE can ensure is available so
that the other 99.999% of apps can get by.

The "Oracle" JDK gets by in this case precisely because it has a real physical font
to fall back on.

-phil.

On 11/12/2012 12:29 PM, Mario Torre wrote:
Hi Phil,

I believe that the underlying problem here is that it should be legal to create a font from a file, even if the FontManager doesn't have any fonts installed.

So, code like the one in the example:
public class Test {
     public static void main(String[] args) throws Exception {
         Font.createFont(Font.TRUETYPE_FONT, new File("example.ttf"));
     }
}

When passed a real, valid font (example.ttf in this case) would still fail with the old code, and instead would work with the given patch (at least, I think this is the idea here, Jiri can probably explain in more details his intentions?).

Cheers,
Mario


2012/11/12 Phil Race <philip.r...@oracle.com <mailto:philip.r...@oracle.com>>

    Hello Jiri,

    Doesn't this just move the point of failure to a bit later ?
    I can't see how having zero fonts on the system is survivable for an
    app that uses fonts. That's the principal reason we haven't tried
    to do something like this already.

    When facing system configuration issues maybe we just need to
    print a better message for the exception such as
    throw new InternalError("Can't find any fonts installed on this
    system.");

    Or make the default font more configurable and distros could ship
    one in jre/lib/fonts.

    BTW it appears you are only trying to solve the problem for
    Linux/Unix.
    Nothing for Windows or OS X.

    -phil.


    On 11/12/2012 10:07 AM, Jiri Vanek wrote:

        Hi!

        This is attempt to fix
        https://bugzilla.redhat.com/show_bug.cgi?id=862355
        The patch is introducing new exception
        src/share/classes/sun/font/NoFontsFoundException.java, which
        is thrown from
        /src/solaris/classes/sun/awt/X11FontManager.java    instead of
        null pointer exception when no fonts are found on system.
        Exception is then catch in
        src/share/classes/sun/font/FontManagerFactory.java, and in
        this case it returns (and not caching the instance of it)
        dummy font manager instead of continue in failure.
        the dummy manager do nothing, except that it is able to create
        java.awt.Font in same way as SunFontManager is doing, but is
        not doing any caching.

        To avoid duplicate code with
        src/share/classes/sun/font/SunFontManager.java, i have
        extracted code from method createFont2D to new method here -
        prepareFont2D - which is responsible for creating font until
        caching..

        Best regards,
          J.

        webrev
        http://jvanek.fedorapeople.org/oracle/jdk8/webrevs/fontProperties/
        with test  (although it will probably need some tuning and I'm
        not sure where is the best place for it)
        
http://jvanek.fedorapeople.org/oracle/jdk8/webrevs/fontProperties/test/src/nofontsreproducer/






--
pgp key: http://subkeys.pgp.net/ PGP Key ID: 80F240CF
Fingerprint: BA39 9666 94EC 8B73 27FA  FC7C 4086 63E3 80F2 40CF

IcedRobot: www.icedrobot.org <http://www.icedrobot.org>
Proud GNU Classpath developer: http://www.classpath.org/
Read About us at: http://planet.classpath.org
OpenJDK: http://openjdk.java.net/projects/caciocavallo/

Please, support open standards:
http://endsoftpatents.org/

Reply via email to