Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 Can';t读取*.ttf文件_Java_Fonts_Java Io - Fatal编程技术网

Java Can';t读取*.ttf文件

Java Can';t读取*.ttf文件,java,fonts,java-io,Java,Fonts,Java Io,我正在为我正在创建的语言编写词典。这种语言不使用任何英文字母,所以我使用免费的在线软件在创建了自己的字体,希望它能让我使用我的语言符号。制作此词典的第一步是导入此自定义字体,但它不起作用。下面是我导入代码的部分: /** * Constructor for class Bank */ public Bank() throws Exception { //Previous code creates frame and pane with

我正在为我正在创建的语言编写词典。这种语言不使用任何英文字母,所以我使用免费的在线软件在创建了自己的字体,希望它能让我使用我的语言符号。制作此词典的第一步是导入此自定义字体,但它不起作用。下面是我导入代码的部分:

    /**
     * Constructor for class Bank
     */
    public Bank() throws Exception
    {
        //Previous code creates frame and pane with no problems

        try{
            font1 = Font.createFont(Font.TRUETYPE_FONT, new File("fonts/ShoriPart1.ttf"));
        }
        catch(IOException|FontFormatException e){
        }
        font1 = font1.deriveFont(Font.PLAIN, 20);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(font1);
        JList fonts = new JList(ge.getAvailableFontFamilyNames());
        JOptionPane.showMessageDialog(null, new JScrollPane(fonts));
        JLabel l = new JLabel("The quick brown fox jumps over the lazy dog. 0123456789");
        l.setFont(font1);
        pane.add(l);
        frame.pack();

        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
每次我运行它时,它都会抛出java.io.IOException“无法读取字体\ShoriPart1.ttf(在java.awt.Font中)。”我使用try/catch试图阻止这种情况,但它最终根本没有创建字体。字体文件有问题吗?有没有办法在代码中解决这个问题


编辑:我刚刚尝试在Microsoft Word中使用该字体,效果很好。

第一个提示:永远不会有空的捕获块。至少,您应该将堆栈跟踪打印到
System.out
,但最好重新抛出它。像这样绕过异常是很糟糕的


假设异常消息是您复制的文本字符串,您可能希望确保程序可以读取文件所在的文件夹(即具有权限)。如果是,则很可能是文件格式有问题。

尝试使用
inputStream
将其传递给createFont函数:查看是否有效

InputStream myStream = new BufferedInputStream(new FileInputStream("font.ttf"));
ttfBase = Font.createFont(Font.TRUETYPE_FONT, myStream);

这件事曾经发生在我身上,过了这条小溪就成功了。虽然不知道实际原因,但您有一个空的catch block。代码到底在哪里失败了?如果没有try/catch,它会说它无法读取文件。使用try/catch,下一行返回nullPointerException。因此,try/catch真的对我没有任何帮助;我只是没有摆脱它。异常意味着“你不能像此方法工作一样继续,因为它不工作。”忽略异常不会使
createFont
工作。异常意味着它失败了,所以您应该在catch块中退出构造函数,并且您需要注意异常告诉您的内容。谢谢您的提示。我是Java新手,以防这不明显。该程序应该有权限。它在我的文档中的源文件夹中。所以这可能是字体本身的问题?重新检查您的文件是否确实存在于您试图读取它的类文件的同一目录中我感觉像个白痴。。。我把这个文件放在我实际程序的文件夹里。我用另一个来测试它。。。谢谢。这里创建缓冲输入流的目的是什么?似乎对我来说只有文件输入流是一样的。