在使用Java Web Start启动的Java应用程序中使用非默认字体

时间:2014-05-08 20:46:51

标签: java unicode fonts jnlp

我有一个Java应用程序,其中Unicode字符的呈现失败,因为默认字体不支持它们。我已经尝试了几个修复程序(其中一些基于此论坛的帖子),当我直接从命令行启动应用程序时,所有修复都有效,但是当使用Java Web start时,所有修复都会失败。

1)从命令行传递这些参数

java -Xmx1g -jar /Users/sschultz/Documents/workspace/core-mcf/build/Pert.jar -Dswing.aatext=true -Dswing.plaf.metal.controlFont=Arial -Dswing.plaf.metal.userFont=Arial

确实有效。但是,据我所知,要在JNLP文件中传递它们,需要将它们作为属性传递:

<resources>
    <j2se version="1.7" java-vm-args="-Xmx512m"/>
    <property name="swing.aatext" value="true"/>
    <property name="swing.plaf.metal.controlFont" value="Arial"/>
    <property name="swing.plaf.metal.userFont" value="Arial"/>
    <jar href="https://.../Pert.jar"/>
   </resources>

此外,由于它们被视为非安全属性,因此签名的JAR文件必须在JNLP-INF / APPLICATION_TEMPLATE.JNLP中包含JNLP文件的副本。能够验证模板文件实际上是否正在被找到,并且在加载应用程序时正在通过验证。但是,显然没有使用Arial字体,因为Unicode字符无法正确呈现。

2)所以我尝试使用以下方法在启动时直接在应用程序中设置默认字体:

UIManager.getLookAndFeelDefaults().put("defaultFont", new Font("Arial", Font.PLAIN, 10));

从命令行启动时可以正常工作但使用web start失败。

3)接下来我尝试仅为我缩进的面板设置字体以呈现unicode文本:

Font font = new Font("Arial", Font.PLAIN, 10);
this.reviewScrollPane.setFont(font);

这也适用于命令行,但在启动时失败。

4)最后,我读了一篇帖子,建议在Java Web Start启动的JAR文件中必须提供非默认字体作为资源,所以我将Arial.ttf添加到我的JAR并将上面的代码更改为:

Font font = new Font("Arial", Font.PLAIN, 10);
String msg = "Font found";
ClassLoader cl = this.getClass().getClassLoader();
try 
{
    font = Font.createFont(Font.TRUETYPE_FONT, cl.getResourceAsStream("Arial.ttf"));
    font.deriveFont(Font.PLAIN, 10f);
} 
catch (FontFormatException | IOException e) 
{
    System.out.println(msg = "Font Arial not found.");
}
this.reviewScrollPane.setFont(font);

我确认Arial.ttf确实出现在JAR中,并且使用日志记录,它实际上是通过调用createResourceAsStream()找到的。同样,当从命令行启动应用程序但现在使用Web启动时,将正确呈现unicode字符。

任何帮助表示感谢。

0 个答案:

没有答案