Java Jar文件引发异常
我使用Java1.8和IntelliJIdea。要使用该程序,我下载字体Java Jar文件引发异常,java,swing,fonts,Java,Swing,Fonts,我使用Java1.8和IntelliJIdea。要使用该程序,我下载字体 InputStream is1 = GameField.class.getResourceAsStream("assets/fonts/ARIALN.ttf"); private Font myArialNarrow; { try { myArialNarrow = Font.createFont(Font.TRUETYPE_FONT, is1); } cat
InputStream is1 = GameField.class.getResourceAsStream("assets/fonts/ARIALN.ttf");
private Font myArialNarrow;
{
try {
myArialNarrow = Font.createFont(Font.TRUETYPE_FONT, is1);
} catch (FontFormatException e) {
System.out.println("error1");
e.printStackTrace();
} catch (IOException e) {
System.out.println("error2");
e.printStackTrace();
}
}
private Font myFont1 = myArialNarrow.deriveFont(30f);
因此,我有一个大小为30的字体myFont1。当我在IDE中运行程序时,一切正常,但如果我使用jar,文件会抛出一个异常:
error2
java.io.IOException: Problem reading font data.
at java.awt.Font.createFont0(Font.java:1000)
at java.awt.Font.createFont(Font.java:877)
at com.pumaex.GameField.<init>(GameField.java:57)
at com.pumaex.LinesLauncher.main(LinesLauncher.java:5)
Exception in thread "main" java.lang.NullPointerException
at com.pumaex.GameField.<init>(GameField.java:70)
at com.pumaex.LinesLauncher.main(LinesLauncher.java:5)
1) 与其直接进入输入流,不如尝试以下简单的调试代码:
URL=GameField.class.getResource(“assets/fonts/ARIALN.ttf”);System.out.println(“URL:URL”);
2)注意,使用getResource..
的形式看起来可疑地像是获取引导类加载器,而不是用于应用程序资源的加载器,但首先报告第(1)点的结果。插入的行:URL=GameField.class.getResource(“assets/fonts/arieln.ttf”);System.out.println(“URL:+URL”);进入控制台-URL:file:/C:/Users/Ura/IdeaProjects/Lines1/out/production/Lines1/com/pumaex/assets/fonts/ARIALN.ttfHuh..好吧,我有点惊讶它返回了一个有效的URL。接下来,基于该URL创建一个缓冲输入流,并将该流传递给createFont
方法。在我添加的问题中。(参见正在讨论的程序)。我正在运行这个程序。一切正常。但是,如果我制作一个jar文件并运行它,我会在线程“main”java.io.IOException:Stream closedI中得到一个异常:exception。我根本不懂什么。错在哪里?1)与其直接进入输入流,不如尝试以下简单的调试代码:URL=GameField.class.getResource(“assets/fonts/ARIALN.ttf”);System.out.println(“URL:URL”)代码>2)注意,使用getResource..
的形式看起来可疑地像是获取引导类加载程序,而不是用于应用程序资源的加载程序,但首先报告第(1)点的结果。插入行:URL URL URL=GameField.class.getResource(“assets/fonts/ARIALN.ttf”);System.out.println(“URL:+URL”);进入控制台-URL:file:/C:/Users/Ura/IdeaProjects/Lines1/out/production/Lines1/com/pumaex/assets/fonts/ARIALN.ttfHuh。。好吧,我有点惊讶它返回了一个有效的URL。接下来的事情。基于该URL创建一个缓冲输入流,并将该流传递给createFont
方法。(参见相关程序)。我正在运行这个程序。一切正常。但如果我创建一个jar文件并运行它,我会在线程“main”java.io.IOException:Stream closedI中得到一个异常:exception根本不懂任何东西。错在哪里?
import java.awt.Font;
import java.awt.FontFormatException;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Problem {
public static Font loadFile(String filePath) throws IOException, ClassNotFoundException, FontFormatException {
try (final InputStream is = new BufferedInputStream(Problem.class.getClassLoader().getResourceAsStream(filePath))) {
return Font.createFont(Font.TRUETYPE_FONT, is);
}
}
public static void main(String[] args) throws Exception {
Font font = loadFile("assets/fonts/ARIALN.ttf");
Font myFont1 = font.deriveFont(30f);
System.out.println(myFont1);
}
}