Java Jar文件引发异常

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

我使用Java1.8和IntelliJIdea。要使用该程序,我下载字体

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);
    }

}