Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义字体赢得';我不能在可运行的罐子里工作_Java_Eclipse_Fonts - Fatal编程技术网

Java 自定义字体赢得';我不能在可运行的罐子里工作

Java 自定义字体赢得';我不能在可运行的罐子里工作,java,eclipse,fonts,Java,Eclipse,Fonts,我编写了一个使用自定义(.ttf)字体的程序。我希望能够将它导出到一个可运行的JAR文件中,但是我发现当我创建JAR文件时,字体不需要。但是,如果我从Eclipse启动它,它确实工作得很好。我用来添加字体的代码是: GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); try { ge.registerFont(Font.createFont(Font.TRUETYPE_FO

我编写了一个使用自定义(.ttf)字体的程序。我希望能够将它导出到一个可运行的JAR文件中,但是我发现当我创建JAR文件时,字体不需要。但是,如果我从Eclipse启动它,它确实工作得很好。我用来添加字体的代码是:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    try {
        ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("neuropol x rg.ttf")));
    } catch (FontFormatException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

我看过很多其他关于这个主题的文章,它们似乎都表明你需要将字体作为资源而不是文件来访问,但我不能100%确定两者之间的区别。我看到的每个示例都创建了一个新字体的实例,但是当我在程序中尝试一些代码片段时,使用新字体也不起作用。有人能帮我解释一下吗?谢谢。

我猜这些字体的路径是相同的吗?对不起,我应该提到这一点
neuropol x rg.ttf
src
.settings
bin
)一起位于项目文件夹中。如果字体包含在Jar中,则需要使用类似于
ge.registerFont(Font.createFont(Font.TRUETYPE\u Font,getClass().getResourceAsStream(“neuropol x rg.ttf”))的字体。如果不是,请记住,字体的路径是相对于执行jar的位置的,而不是jar所在的位置。如果包含堆栈跟踪,可能也会很有帮助,您需要从命令行运行jar来获得它。是的,这肯定是关于文件位置的一个很好的观点。但是,使用上面的代码会导致读取字体数据时出现错误
问题
。通过进一步研究,我了解到此错误可能是由于Java找不到指定的文件(路径不正确)。如果文件在项目文件夹中,路径(“neuropol x rg.ttf”)是否正确?或者我不应该使用相对路径?字体是否在同一路径中?对不起,我应该提到这一点
neuropol x rg.ttf
src
.settings
bin
)一起位于项目文件夹中。如果字体包含在Jar中,则需要使用类似于
ge.registerFont(Font.createFont(Font.TRUETYPE\u Font,getClass().getResourceAsStream(“neuropol x rg.ttf”))的字体。如果不是,请记住,字体的路径是相对于执行jar的位置的,而不是jar所在的位置。如果包含堆栈跟踪,可能也会很有帮助,您需要从命令行运行jar来获得它。是的,这肯定是关于文件位置的一个很好的观点。但是,使用上面的代码会导致读取字体数据时出现错误
问题
。通过进一步研究,我了解到此错误可能是由于Java找不到指定的文件(路径不正确)。如果文件在项目文件夹中,路径(“neuropol x rg.ttf”)是否正确?或者我不应该使用相对路径?