在为一些自定义数据运行排序程序时,我遇到了一些运行时异常,它在 Eclipse 中占据了整个控制台。我想查看异常的原因和消息。所以我使用如下 FileWriter 来编写异常消息。但是文本文件是 0 字节,这意味着没有写入任何内容。
我还尝试从终端(在 linux -ubuntu 中)运行代码并使用 > 来重定向异常消息,但仅从 system.out.println() 获得输出 FileWriter 不会写入异常消息。
下面是代码的相关部分。有人能告诉我为什么会这样吗?我尝试添加 fw.flush() 但它没有任何区别。
public class MySort{
...
public static void sort(String[] data){
...
}
public static void main(String[] args) throws IOException {
String[] a = {"E","A","S","Y","Q","U","E","S","T","I","O","N"};
FileWriter fw = new FileWriter("sorterr.txt");
try{
sort(a);
}catch(RuntimeException e){
System.out.println("some text");
fw.write(e.getMessage());
fw.flush();
fw.close();
System.exit(0);
}
}
}
在 Eclipse 或 Linux 终端中运行时,sorterr.txt
为0
字节
在终端中,重定向的行为也相同。简而言之,catch 块内的任何内容都不会打印出这些值。
更新:这是一个stackoverflow错误,这就是为什么它没有被catch块捕获的原因(这意味着RuntimeException)..
我通过设置检测到这一点
System.setErr(new PrintStream(new File("error.txt")));
因此,堆栈跟踪打印在 error.txt 中,这表明
Exception in thread "main" java.lang.StackOverflowError
at mysort.exercises.MySort.partition(MySort.java:67)