java - 为什么这段代码会抛出异常?

标签 java

我有一个 void 方法,它是 quartz 调度程序任务运行的流程的一部分。

该方法的内容是这段代码:

try {
        InputStream ris = this.getClass().getResourceAsStream("arialuni.ttf");
        byte[] ttfAfm = new byte[1];
        if (ris != null) {
            System.out.println("toByteArray START");
            ttfAfm = IOUtils.toByteArray(ris);
            System.out.println("toByteArray END");
        } else
            System.out.println("input stream from arailuni.ttf is null!!!");
        ris.close();
        ris = null;
        bfChinese =
                BaseFont.createFont("arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true, ttfAfm, null);
        System.out.println("in myinit() try catch END");
    } catch (Exception e) {
        System.out.println("exception encountered at myinit() " + e);
    }

很奇怪,这大约可以运行 30 次(基本上,调度程序扫描一个目录,获取找到的任何 PCL 并使用这种 arialuni.ttf 字体将其转换为 PDF),但突然它给出了以下异常:

19:06:24,316 INFO  [STDOUT] toByteArray START
19:06:28,218 ERROR [ReportPollingJob] java.lang.reflect.InvocationTargetExceptio
n
//nothing else here (yes, the exception is only one line...)

IOUtils.toByteArray(ris)

难道是内存的原因? 很奇怪,它没有去我的捕获,而是抛出这个异常......

能给个提示吗?

更新:感谢 mdma:我已更改为 catch(Throwable e),现在我看到:

java.lang.OutOfMemory: JavaHeap Space

这并不容易解决......

最佳答案

InitationTargetException 只是真正异常的包装器,因此您应该对其进行分析(通过 getCause())。它可能是一个 OutOfMemoryError,它不会子类 Exception。要捕获每个错误条件,请改为捕获 Throwable

关于java - 为什么这段代码会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5687769/

相关文章:

java - mbeanServer.invoke 中的参数类型不匹配

java - CSV , JAVA 和 HSQLDB

java - Swing线程通信

java - 读取文本文件时未找到行错误

java - 随机数方法的 Junit 测试

java - Apache Camel ElasticSearch 删除操作

java - JPA 2.1 属性转换器转换 enum 仍插入 int

java - ArrayList.remove(i) 不会删除所有对象,因为它应该

java - 在 JFreeChart 中手动指定对数轴上的刻度线

java - 如何访问对象内部的元素