0

在为一些自定义数据运行排序程序时,我遇到了一些运行时异常,它在 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.txt0字节

在终端中,重定向的行为也相同。简而言之,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)
4

1 回答 1

0

尝试

File file = new File("sorterr.txt");
BufferedWriter output = new BufferedWriter(new FileWriter(file));
output.write(e.getMessage());
output.close();

问题是您使用 FileWriter 错误。

于 2013-07-20T05:04:01.247 回答