2013-07-20 26 views
0

对某些自定义数据运行排序程序时,我得到了一些运行时异常,它在eclipse中占用了整个控制台。我希望看到异常的原因和消息。因此,我使用下面的FileWriter来编写异常消息。然而,文本文件是0字节,这意味着什么都没有写。我试图从终端(在linux -ubuntu)运行代码,并使用>来重定向异常消息,但只从system.out.println()获得输出() FileWriter不写异常消息。从java程序查看运行时异常消息

下面是代码的相关部分..有人可以告诉我为什么发生这种情况?我尝试添加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块内没有打印出值。

UPDATE: 这是一个计算器的错误,这就是为什么它没有被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) 

回答

0

尝试

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

的问题是,你正在使用的FileWriter错误。

+0

试图说..still相同的结果..所有错误stacktrace打印到标准输出,而不是文件 – damon

+0

我认为FileWriter将工作与文件名字符串作为参数传递.. – damon