使用自定义字体 [java.io.IOException:读取字体数据时出错。]

     2023-03-15     201

关键词:

【中文标题】使用自定义字体 [java.io.IOException:读取字体数据时出错。]【英文标题】:Using Custom Fonts [java.io.IOException: Error reading font data.] 【发布时间】:2013-05-13 08:55:33 【问题描述】:

标题不允许我说问题,所以实际的错误消息是 -

java.io.IOException: Problem reading font data.
at java.awt.Font.createFont(Unknown Source)
at AddFont.createFont(AddFont.java:11)
at MainFrame$1.run(MainFrame.java:105)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

代码是-

     public static void main(String[] args) 
javax.swing.SwingUtilities.invokeLater(new Runnable() 
 public void run() 
    try 
        AddFont addFont = new AddFont();
        addFont.createFont();
     catch (Exception e) 
        e.printStackTrace();
    
    createGUI();

  //public void run() Closing
);

还有我用来获取AddFont addFont的文件-

import java.awt.Font;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;


public class AddFont extends MainFrame
public void createFont()
Font ttfBase = null;
    Font telegraficoFont = null;
try 
    InputStream myStream = new BufferedInputStream(new FileInputStream(FONT_PATH_TELEGRAFICO));
    ttfBase = Font.createFont(Font.TRUETYPE_FONT, myStream);
    telegraficoFont = ttfBase.deriveFont(Font.PLAIN, 24);
 catch (Exception ex) 
    ex.printStackTrace();
    System.err.println("Font not loaded.");




我被指示创建一个新线程,因为这是与我的另一个问题不同的问题。

为什么会出现这个问题,我该如何解决? 我的 imageFolder 中有我的 TELEGRAFICO.TTF 字体,这实际上只是我的资源文件夹。我用

   public static final String FONT_PATH_TELEGRAFICO = "imageFolder/TELEGRAFICO.TTF";

呼唤我的道路。

我做错了什么?

编辑 - 我不再收到该错误消息,也没有收到“未加载字体”。除了我在其中使用该方法的文件之外,我如何在其他类文件中使用该字体?

(我想在多个类文件中的按钮上使用该字体。我在这里尝试使用它 -

regButton = new JButton();
regButton.setText("Foo");
regButton.setAlignmentX(Component.CENTER_ALIGNMENT);
regButton.setFont(telegraficoFont);

但它说 telegraficoFont 无法解析为变量。 (因为它在不同的类文件中。)

我该如何解决这个问题?再次感谢您的帮助。

【问题讨论】:

代替AddFont.class.getResourceAsStream(FONT_PATH_TELEGRAFICO) 试试Thread.currentThread().getContextClassLoader().getResourceAsStream(FONT_PATH_TELEGRAFICO) @Perception 好的,那么我该怎么处理第二部分,即 Font telegraficoFont = Font.createFont(Font.TRUETYPE_FONT,telegraficoFontAdd);该代码删除了变量 telegraficoFontAdd。 使用完整的包路径访问字体,例如/com/mydomain/imageFolder/TELEGRAFICO.TTF。 请发布完整的错误堆栈跟踪。 @Ravi Trivedi,消息中已编辑完整错误。 【参考方案1】:

在某些情况下,原因是正在运行的实例无法写入 Java 临时目录 (java.io.tmpdir)。

如果你在tomcat上运行,可能是你删除了tomcat安装的临时目录,或者文件夹权限错误。

(tomcat 文件夹)/temp

【讨论】:

【参考方案2】:

由于您对可能的font file locatingfont stream creation 有疑问,

试试这个 >> Issue loading custom font AND http://forums.devshed.com/showpost.php?p=2268351&postcount=2

要回答您的问题"how to make this function easy to use everywhere",请执行以下操作:

    public class AddFont extends MainFrame 

    private static Font ttfBase = null;
    private static Font telegraficoFont = null;
    private static InputStream myStream = null;
    private static final String FONT_PATH_TELEGRAFICO = "imageFolder/TELEGRAFICO.TTF";

    public Font createFont() 


            try 
                myStream = new BufferedInputStream(
                        new FileInputStream(FONT_PATH_TELEGRAFICO));
                ttfBase = Font.createFont(Font.TRUETYPE_FONT, myStream);
                telegraficoFont = ttfBase.deriveFont(Font.PLAIN, 24);               
             catch (Exception ex) 
                ex.printStackTrace();
                System.err.println("Font not loaded.");
            
            return telegraficoFont;
    

然后在你的调用类中:

    public class Test 

    public static Font font = null;

    public static void main(String[] args) 
        javax.swing.SwingUtilities.invokeLater(new Runnable() 
            public void run() 
                try 
                    if (font == null) 
                        font = AddFont.createFont();
                    
                 catch (Exception e) 
                    e.printStackTrace();
                
                createGUI();

             // public void run() Closing
        );
    

【讨论】:

试过了,必须进行一些编辑才能在我的项目文件中工作,它可以工作。谢谢!【参考方案3】:

在某些情况下,您的运行环境中可能缺少Fontconfig。安装后一切正常。

例如,

yum install fontconfig

【讨论】:

这对我来说是个问题(在最小的 CI 机器上)【参考方案4】:

你可以尝试安装“dejavu-sans-fonts”和fontconfig,它可以工作

【讨论】:

如何为uilabel使用自定义字体[重复]

】如何为uilabel使用自定义字体[重复]【英文标题】:howtousecustomfontforuilabel[duplicate]【发布时间】:2014-01-0500:17:45【问题描述】:嗨,我正在使用自定义字体xcode5。它的字体系列名称是“AlegreSans”我在网上遵循了许多在xcode中使用... 查看详情

在 Android 中使用自定义字体

】在Android中使用自定义字体【英文标题】:UsingacustomtypefaceinAndroid【发布时间】:2011-02-2717:34:45【问题描述】:我想为我正在创建的Android应用程序使用自定义字体。我可以从Code中单独更改每个对象的字体,但我有数百个。所以... 查看详情

在 UIWebView 中使用自定义字体

】在UIWebView中使用自定义字体【英文标题】:UsingcustomfontinaUIWebView【发布时间】:2012-05-1611:15:57【问题描述】:我想在UIWebView中显示自定义字体。我已经将字体放在“应用程序提供的字体”下的plist中。使用代码:UIWebView*webView=[... 查看详情

使用可下载字体作为自定义 Snackbar 字体

】使用可下载字体作为自定义Snackbar字体【英文标题】:UsedownloadablefontascustomSnackbartypeface【发布时间】:2018-07-0108:45:32【问题描述】:正在使用支持库测试Android的可下载字体的新功能。让它在我的文本视图和自定义对话框的整... 查看详情

python中matplotlib自定义设置图像标题使用的字体类型:获取默认的字体族及字体族中对应的字体自定义设置图像标题使用的字体类型

python中matplotlib自定义设置图像标题使用的字体类型:获取默认的字体族及字体族中对应的字体、自定义设置图像标题使用的字体类型目录 查看详情

qt:使用自定义的字体

Qt:使用自定义的字体1.下载字体文件2.加载字体文件3.使用字体 QFontDatabase::addApplicationFont("XENOTRON.TTF");ui->toolButton_2->setFont(QFont("XENOTRON",34)); http://www.cppblog.com/biao/archive/2012/01/01/1633 查看详情

如何预览自定义字体 Android Studio(使用书法)

】如何预览自定义字体AndroidStudio(使用书法)【英文标题】:HowtopreviewCustomFontAndroidStudio(usingCalligraphy)【发布时间】:2016-02-2015:40:25【问题描述】:目前我正在使用书法库来使用自定义字体,很棒https://github.com/chrisjenx/Calligraphy... 查看详情

Tailwind/CSS 使用自定义字体

】Tailwind/CSS使用自定义字体【英文标题】:Tailwind/CSSusingcustomfonts【发布时间】:2021-03-2722:32:02【问题描述】:我有一个项目需要使用自定义字体。但我不知道如何在我的HTML中使用它。我已经在网上搜索了如何执行此操作,但所... 查看详情

节点画布:使用自定义字体

】节点画布:使用自定义字体【英文标题】:node-canvas:Usingcustomfont【发布时间】:2015-12-0721:59:38【问题描述】:我想知道如何在node-canvas中使用自定义字体。这是我的尝试,但到目前为止它不起作用:varCanvas=require(\'canvas\'),Image=C... 查看详情

DocumentView 在使用自定义字体时显示错误

】DocumentView在使用自定义字体时显示错误【英文标题】:DocumentViewshowsmeerrorwhileusingcustomfont【发布时间】:2015-06-2005:13:04【问题描述】:朋友我正在使用DocumentView来证明并在其中使用自定义字体。我可以很好地证明字体的合理性... 查看详情

在 WKWebView 中使用自定义字体

】在WKWebView中使用自定义字体【英文标题】:UsingcustomfontsinWKWebView【发布时间】:2014-11-0506:27:01【问题描述】:我在我的应用程序中使用自定义字体。它们被复制到bundle并硬编码到appName-info.plist。这种字体在整个应用程序和UIWebV... 查看详情

使用jdk自带ssl包进行https通讯双向认证

package com.iraid.test;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader 查看详情

swift使用自定义字体(代码片段)

查看详情

使用自定义字体与expo反应原生,每次加载字体

】使用自定义字体与expo反应原生,每次加载字体【英文标题】:UsingcustomFontinreactnativewithexpo,loadingfonteverytime【发布时间】:2017-11-0218:05:18【问题描述】:我正在使用Expo和create-react-native应用程序。我喜欢手机上的实时/热加载功... 查看详情

使用自定义字体相关问题

1、自定义字体生成:  自定义字体一般只有ttf格式的,所以需要根据ttf文件转换成我们需要的eot、woff、svg文件,以适用各个浏览器,如图参考:     转换工具: FontsQuirrel、onlinefontconverter  ttf2eo... 查看详情

如何在gmail中使用自定义字体?

】如何在gmail中使用自定义字体?【英文标题】:Howtousecustomfontingmail?【发布时间】:2017-01-0120:01:24【问题描述】:我们如何在邮件程序中使用自定义字体,尤其是gmail。我进行了很多搜索,但没有发现任何有用的东西,但我在我... 查看详情

DOMPDF 的自定义字体

...DOMPDF【发布时间】:2012-09-1620:45:03【问题描述】:我正在使用DOMPDF0.6.0Beta2。我想在PDF文件中使用自定义字体(字体:\'SegeoPrint\'、\'LucidaHandwriting\'、\'AirplanesintheNightSky\')。我按照指南在我的PHP代码中安装和使用字体,这里给出... 查看详情

如何在网站上使用自定义字体? [复制]

】如何在网站上使用自定义字体?[复制]【英文标题】:HowcanIusecustomfontsonawebsite?[duplicate]【发布时间】:2012-11-1503:07:36【问题描述】:为了让我的网站看起来不错,我需要使用自定义字体,特别是Thonburi-Bold。问题是-除非用户安... 查看详情