平时写Java代码时,想看抛出的异常信息,来找出具体的异常点,我们常常会用Exception.toString ()或者 Exception.getMessage()来取得异常信息,再把它print到控制台,,但是这些信息只能告诉我们异常本身的信息,对我们找出异常点帮助并不太理想,所以我们会使用Exception.printStackTrace()方法,这样就可以在控制台输出非常详细的异常信息,甚至可以通过它跟踪到异常发生在某个类的第几行,这对我们非常有用。但是我们有时只想得到这些 StackTrace数据,通过其它方式表现出来(非控制台,如网页或GUI),这就有了这篇文章.回想一下,原来的日志工具log4、weblogic服务器、还有webshpere服务器等等好像都可以得到这些信息,所以就先直接在Exception类找找有没有直接的方法可以返回这些信息,看到getStackTrace()方法返回一个StackTraceElement对象的集合(原来怎么没注意到呢?),翻一下JDK,一看StackTraceElement类提供的方法(

 
String getFileName() 
          Returns the name of the source file containing the execution point represented by this stack trace element.
 int getLineNumber() 
          Returns the line number of the source line containing the execution point represented by this stack trace element.
 String getMethodName() 
          Returns the name of the method containing the execution point represented by this stack trace element.
 int hashCode() 
          Returns a hash code value for this stack trace element.
 boolean isNativeMethod() 
          Returns true if the method containing the execution point represented by this stack trace element is a native method.
 String toString()

)没错,就是他了,写段代码测试一下先:

  1. public static void main(String[] args) {
  2. try{
  3. byte[] a=args[0].getBytes();
  4. }catch (Exception ex){
  5. ex.printStackTrace();
  6. StackTraceElement [] messages=ex.getStackTrace();
  7. int length=messages.length;
  8. for(int i=0;i<length;i++){
  9. System.out.println("ClassName:"+messages[i].getClassName());
  10. System.out.println("getFileName:"+messages[i].getFileName());
  11. System.out.println("getLineNumber:"+messages[i].getLineNumber());
  12. System.out.println("getMethodName:"+messages[i].getMethodName());
  13. System.out.println("toString:"+messages[i].toString());
  14. }
  15. }
  16. }

Ok,秘密找到了,原来就这么回事。

下面自己写了一个得到异常详细信息的方法

    1. public String getExceptionDetail(Exception e) {
    2. StringBuffer stringBuffer = new StringBuffer(e.toString() + "\n");
    3. StackTraceElement[] messages = e.getStackTrace();
    4. int length = messages.length;
    5. for (int i = 0; i < length; i++) {
    6. stringBuffer.append("\t"+messages[i].toString()+"\n");
    7. }
    8. return stringBuffer.toString();
    9. }

得到java异常printStackTrace的详细信息的更多相关文章

  1. java的异常(Exception)信息的详细记录

    下面的三个方法都是获取异常的详细信息,或许的异常详细信息以字符串的形式返回,保持栈堆载的风格 方法一: public static String getExceptionAllinformation( ...

  2. java中的异常和处理详细理解

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用System.ou ...

  3. java 异常体系详细介绍

    一.异常概述与异常体系结构 异常:在Java语言中,将程序执行中发生的不正常情况称为"异常".(开发过程中的语法错误和逻辑错误不是异常). Java把异常当作对象来处理,并定义一个 ...

  4. Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php

    Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处 ...

  5. 打印Java异常堆栈信息

    背景 在开发Java应用程序的时候,遇到程序抛异常,我们通常会把抛异常时的运行时环境保存下来(写到日志文件或者在控制台中打印出来).这样方便后续定位问题. 需要记录的运行时环境包含两部分内容:抛异常时 ...

  6. Effective Java 第三版——75. 在详细信息中包含失败捕获信息

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  7. 异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\IUSR' 登录失败解决办法

    最近在做.net项目,因为本人以前做java较多,所以对.net不熟悉,在项目完成后部署到IIS服务器上出现诸多问题,以上其中之一,若有时间,在更新其他问题的解决办法! 异常详细信息: System. ...

  8. java异常分析;剖析printStackTrace和fillInStackTrace

    Java异常的栈轨迹(Stack Trace) 捕获到异常时,往往需要进行一些处理.比较简单直接的方式就是打印异常栈轨迹Stack Trace.说起栈轨迹,可能很多人和我一样,第一反应就是printS ...

  9. java异常相关说明(printStackTrace,fillInStackTrace等)

    我们在实际场景中很容易catch(Exception e) 简单粗暴 这样写代码有几个问题 1.你无法细分具体异常 因为有时需要针对不同异常 产生不同的应对行为 2.直接exception 往往不会包 ...

随机推荐

  1. scala如何在任意方法中打印当前线程栈信息(StackTrace)

    1.以wordcount为例 package org.apache.spark.examples import org.apache.spark.{SparkConf, SparkContext} / ...

  2. php高效率对一维数组进行去重

    $input = array("a" => "green", "red", "b" => "gre ...

  3. C# 方法 虚方法的调用浅谈 引用kdalan的博文

    我们在面试中经常碰到有关多态的问题,之前我也一直被此类问题所困扰,闹不清到底执行哪个方法. 先给出一道简单的面试题,大家猜猜看,输出是?     public class A    {         ...

  4. getDate() 各种时间格式

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVERT(varchar(100), GETDATE() ...

  5. 程序员容易忽略的SQL Server错误集锦

    1.大小写 大写T-SQL 语言的所有关键字都使用大写,规范要求. 2.使用“;” 使用“;”作为 Transact-SQL 语句终止符.虽然分号不是必需的,但使用它是一种好的习惯,对于合并操作MER ...

  6. Nexus环境搭建

    安装 1.解压nexus-2.11.01-bundle.zip到F:\Java\nexus(可自定义) 2.进入F:\Java\nexus\nexus-2.11.1-01\bin\jsw进入相应的系统 ...

  7. 经典问题——输出n对括号的所有组合

    问题 n对括号有多少种合法的组合,比如两对括号可以有两种:()()和(()) 思路 问题等价为:在一个字符串中包含两种字符:'('和')',他们出现的次数都为n,并且任何时候'('出现的次数总是大于或 ...

  8. CPU怎么计算1+1----CPU计算的电路基础

    从<十进制和二进制的运算---我所理解到的人类的运算的本质>这里我们知道,人类进行运算的本质是查表,并且我们存储的表是有限的.那么计算机是怎进行四则运算的呢,也是查表吗,肯定不是,今天,我 ...

  9. ffmpeg处理网络流

    最近遇到好几个人在问ffmpeg如何处理网络流,刚好前段时间也在做这方面,抽空整理了下,把主要代码发出来,希望对大家有用.为简单处理,我这里只简单介绍UDP接收TS流,其实只要是socket接收的都可 ...

  10. google查找笔记

    1.可以选择MDN.WIKI等权威的网址资料