当前位置: 首页 > 知识库问答 >
问题:

从jar文件获取资源文件

白禄
2023-03-14

启动jar时,控制台会说找不到文件,也没有加载字体。我怎样才能解决这个问题?

我得到了这个密码:

public class FontLoader {
    
    public static Font load(){
        String fontFilePath = Paths.get(System.getProperty("user.dir"), "prova.jar", "Retro Gaming.ttf").toString();
        int fontStyle = Font.BOLD;
        int fontSize = CenterOnDefaultScreen.center().height*2/100;
        Font font = null;
        int fontTypeResource = Font.TRUETYPE_FONT;

        if((fontFilePath == null || fontFilePath.isEmpty()) || fontSize < 1) {
            throw new IllegalArgumentException("load() Method Error! Arguments " +
                                                "passed to this method must contain a file path or a numerical " +
                                                "value other than 0!" + System.lineSeparator());
        }

        try {
            font = Font.createFont(fontTypeResource, new FileInputStream(
                   new File(fontFilePath))).deriveFont(fontStyle, fontSize);
        }
        catch (FileNotFoundException ex) {
            System.out.println("FileNotFoundException: " + fontFilePath);
        }
        catch (FontFormatException | IOException ex) {
            System.out.println("Exception thrown");
        }
        return font;
    }
}

共有1个答案

楚帅
2023-03-14

String fontFilePath=Paths.get(System.get属性("user.dir "), " prova.jar","Retro Gaming.ttf"). toString();

那...很明显行不通。

你需要使用gRAS(getResourceAsStream)系统 File(正如 new FileInputStream需要的, java.io.File对象)是实际的文件。jar文件中的条目不计算在内。不能用 文件对象引用该ttf文件,也不能用FileInputStream打开它。

幸运的是,createFont方法不要求您传递FileInputStream;任何旧的InputStream都可以。

ttf文件需要与您正在编写的这个类在同一个类路径根中(例如,同一个jar)。一旦您确保了这一点,您就可以使用gRAS:

try (var fontIn = FontLoader.class.getResourceAsStream("/Retro Gaming.ttf")) {
  Font.createFont(Font.TRUETYPE_FONT, fontIn).deriveFont(.., ...);
}

gRAS与FontLoader的位置相同。课堂生活。从你的代码片段来看,听起来像是把ttf放在jar的“根”中,而不是放在FontLoader旁边。getResourceAsStream的字符串参数中的前导斜杠意味着:相对于FontLoader所在位置的根查找(因此,您的jar大概是这样)。

 类似资料:
  • 我需要从应用程序的根内部获得一个资源,当它打包到JAR中时。我的项目是这样的: 我使用以下代码: 在打包到jar之前运行时,它会发现文件很好(在ProjectRoot内部)。运行jar时,它找不到它,并将此路径转换为。 此代码: 在打包之前运行时,查找中的资源。打包后,它声称从中获取资源。 此代码: 我想做的只是将资源放在中,并且能够从jar外部(从IDE运行类文件时)和内部(使用Maven将文件

  • 我想从我的jar中读取一个资源,如下所示: 在Eclipse中运行它时工作良好,但如果我将它导出到一个jar中,然后运行它,就会出现一个IllegalArgumentException: 我真的不知道为什么,但通过一些测试我发现如果我改变 至 然后它的工作方式相反(它在jar中工作,但不能在eclipse中工作)。 我使用的是Eclipse,我的文件所在的文件夹位于类文件夹中。

  • 问题内容: 我在项目的根目录中有一个资源文件夹/程序包,我“不想”加载某个文件。如果我想加载某个文件,我将使用class.getResourceAsStream,我会很好的!我实际上想要做的是在资源文件夹中加载一个“文件夹”,循环访问该文件夹中的文件,并获取每个文件的流,并读取内容…假设在运行时之前未确定文件名… 我该怎么办?有没有一种方法可以获取jar文件中“文件夹”中文件的列表?请注意,带有资

  • 问题内容: 我正在尝试从作为桌面应用程序运行的单独jar中访问jar文件中的XML文件。我可以获取所需文件的URL,但是当我将其传递给FileReader(作为字符串)时,我得到了FileNotFoundException,上面写着“文件名,目录名或卷标语法不正确”。 作为参考,我毫不费力地从同一个jar中读取图像资源,并将URL传递给ImageIcon构造函数。这似乎表明我用来获取URL的方法是

  • 我很难弄清楚这个问题,我几乎什么都试过了。 我希望我的程序从Jar文件中读取两个资源,并且它将在eclipse中运行良好。但是当我从命令提示符运行jar时,它会给出空指针异常。 结构: src/main/java/App。JAVA src/main/resources/properties/application。属性 src/main/resources/spring/applicationCo

  • 我在Eclipse中有一个简单的maven项目。应用程序包含文件:src/main/Resources/test.txt.我想读取文件并将其写入输出。它在Eclipse中工作,但在创建jar文件后不能从命令行。如何配置项目以两种方式工作。我错在哪里?不正确的jar文件、java代码、清单、maven配置? 应用程序结构: 应用程序结构 运行: 错误: Java代码: pom.xml: fileRe