不知java程序或Eclipse能否办到?

解决方案 »

  1.   

    printStackTrace()信息太多,如何只输出
    其文件名和行号.
      

  2.   

    e.getStackTrace()[0].getLineNumber()/getFileName() 
      

  3.   

    e.getStackTrace()[0].getLineNumber()/getFileName() 
    无法处理类反射出现的异常.
      

  4.   

    楼上的,log4j可以实现的吗?汗,用到现在的LOG4J还不知道呢
      

  5.   

    e.getStackTrace()用jbuilder 或 eclipse 开发,
    可以点一下就跳到那里去
      

  6.   

    这样也很有效:public class myClass(){
        public myClass(){}    public void myFonction(){
            try{
                //do things you want!
            }catch(Exception e){
                System.out.println("程序异常!\t代码:myClass.myFonction()");
            }
        }
    }
      

  7.   

    log4j可以打出在哪一行被调用的,你把它放在catch里面就好了
      

  8.   

    我使用了如下方法获得异常所在的文件,行号和方法:
    StackTraceElement stackTraceElement= ex.getStackTrace()[0];// 得到异常棧的首个元素
    System.out.println("File="+stackTraceElement.getFileName());// 打印文件名
    System.out.println("Line="+stackTraceElement.getLineNumber());// 打印出错行号
    System.out.println("Method="+stackTraceElement.getMethodName());// 打印出错方法程序如下:
    public class ExceptionTest{
        public static void main(String[] arg) {
            try{
                throw new Exception("Exception Test!");
            }
            catch(Exception ex){
                ex.printStackTrace();
                    
                String strTemp=ex.getStackTrace().toString();
                    
                StackTraceElement stackTraceElement= ex.getStackTrace()[0];
                System.out.println("File="+stackTraceElement.getFileName());
                System.out.println("Line="+stackTraceElement.getLineNumber());
                System.out.println("Method="+stackTraceElement.getMethodName());
            }
         }
    }输出如下(在Eclipse3.1中):
    java.lang.Exception: Exception Test!
    at ExceptionTest.main(ExceptionTest.java:5)
    File=ExceptionTest.java
    Line=5
    Method=main
    大家可以看到,输出基本可以满足需求,但是没有ex.printStackTrace();产生的链接效果,如点击ExceptionTest.java:5 就可以到达错误处,这里不知道如何处理,那位知道请告知.然而,上述方法不能应付类反射出现的异常,请大家看如下程序:
    public void fetchCommand(String strCmmd){
        cmmdArgs=strCmmd.split("\\s+");
        
        String className="Command"+cmmdArgs[0];
        
        try{
            Class cls=Class.forName(className);
            cmmd=(Command)cls.newInstance();
        }
        catch(Exception ex){
            ex.printStackTrace();
            //System.out.println(ex.getStackTrace()[0].getLineNumber());///getFileName() ;
            
            StackTraceElement stackTraceElement= ex.getStackTrace()[0];
            System.out.println("File="+stackTraceElement.getFileName());
            System.out.println("Line="+stackTraceElement.getLineNumber());
            System.out.println("Method="+stackTraceElement.getMethodName());
        }        
    }当className不是可识别的类名时,输出如下:
     commandType01 start!
        commandType01 Length=3
     commandType01 End! commandType02 start!
        commandType02 is:    Type02    1    2    3    4
     commandType02 End!
    File=null // 这里找不到文件
    Line=-1   // 行出错
    Method=run  // 方法错 commandType02 start!
        commandType02 is:    Type04    USA    Russia    China
     commandType02 End!
    java.lang.ClassNotFoundException: CommandType04
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at Mediation.fetchCommand(Mediation.java:16) // 这里倒是对了
    at Inlet.main(Inlet.java:11)// 这里也对看来StackTraceElement stackTraceElement= ex.getStackTrace()[0];还要继续挖掘.
      

  9.   

    经跟踪发现,现在用这个办法可以完全搞定:
    StackTraceElement stackTraceElement= ex.getStackTrace()[ex.getStackTrace().length-1];
    System.out.println("File="+stackTraceElement.getFileName());
    System.out.println("Line="+stackTraceElement.getLineNumber());
    System.out.println("Method="+stackTraceElement.getMethodName());这里的变化是将ex.getStackTrace()[0]修改成了ex.getStackTrace()[ex.getStackTrace().length-1],因为只有数组的最后一个元素才有我想要的信息,原先的ex.getStackTrace()[0]只是恰巧数组的最后一个元素就是首个元素而已.现在只剩下链接效果的问题了,应该和Eclipse有关,期盼高人指点.