【发布时间】: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,消息中已编辑完整错误。