import java.io.*;public class ThrowableTest extends Throwable
{
File f1 = new File("d:\\test.txt");
PrintWriter s =new PrintWriter(f1);
public static void main(String argv[])
{
try {

FileInputStream f = new FileInputStream("est.txt");
}
catch (FileNotFoundException e)
{

System.out.println("=== toString() ===");
System.err.println(e); System.out.println("=== getLocalizedMessage() ===");
System.err.println(e.getLocalizedMessage()); System.out.println("=== getMessage() ===");
System.err.println(e.getMessage()); System.out.println("=== printStackTrace() ===");
e.printStackTrace(s);
}
}
 

我想把e.printStackTrace()的信息输出到其他文本上.
申明了两个File f1 = new File("d:\\test.txt");PrintWriter s =new PrintWriter(f1);全局变量,在程序最后e.printStackTrace(s);
请高手帮我看看,我的程序错在哪?要怎么做!谢谢各位大哥了!

解决方案 »

  1.   

    有PrintWriter(File)吗?使用Logger或者log4j,不要自己写!
      

  2.   

    你的s和f都是非静态变量,不允许在静态环境main函数中访问,你必须创建ThrowableTest类的实例,才能访问s。
      

  3.   

    File f1 = new File("d:\\test.txt");
    PrintWriter s =new PrintWriter(new FileOutputStream(f1));
      

  4.   

    PS:把上面两句放到main函数中去
      

  5.   

    Dan1980这位好心人能不能再说地具体点?不过还是要谢谢各位仁兄拉兄弟一把的!
      

  6.   

    这样说都不懂,看来楼主基础需要加强啊。File f1 = new File("d:\\test.txt");
    PrintWriter s =new PrintWriter(f1);你这两句是建立了两个实例变量,它是ThrowableTest类的实例的,只有使用new ThrowableTest()建立了该类的实例,才可以得到这两个变量。而main方法是不属于任何ThrowableTest类的实例的,它属于ThrowableTest类本身(因此叫静态方法)。main方法的调用,并不能保证有ThrowableTest类的实例被创建,因此也就不能保证有上面的f1和s两个变量被创建并供你使用。解决方法很多:第1种方法:把f1和s变量声明成静态的,即在前面加上static关键字。这样,这两种变量随着类的装载而被初始化,因此可供main方法使用。第2种方法:把f1和s变量的声明放到main方法中去,即声明成本地变量(即方法变量)。第3种方法:在main方法中创建ThrowableTest类的实例,这样就可以通过该实例的引用来间接引用它的实例变量了。如:e.printStackTrace(new ThrowableTest().s);