×

mediation

mediation(如何在Java程序出现异常时输出其文件和行号)

admin admin 发表于2022-09-20 03:58:56 浏览137 评论0

抢沙发发表评论

本文目录

如何在Java程序出现异常时输出其文件和行号

使用了如下方法获得异常所在的文件,行号和方法:

StackTraceElement stackTraceElement= ex.getStackTrace();// 得到异常棧的首个元素

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();

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 就可以到达错误处,这里不知道如何处理,那位知道请告知.-mediation

然而,上述方法不能应付类反射出现的异常,请大家看如下程序:

public void fetchCommand(String strCmmd){

cmmdArgs=strCmmd.split(“/s+“);

String className=“Command“+cmmdArgs;

try{

Class cls=Class.forName(className);

cmmd=(Command)cls.newInstance();

}

catch(Exception ex){

ex.printStackTrace();

//System.out.println(ex.getStackTrace().getLineNumber());///getFileName() ;

StackTraceElement stackTraceElement= ex.getStackTrace();

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.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();还要继续挖掘.

经跟踪发现,现在用这个办法可以完全搞定:

StackTraceElement stackTraceElement= ex.getStackTrace();

System.out.println(“File=“+stackTraceElement.getFileName());

System.out.println(“Line=“+stackTraceElement.getLineNumber());

System.out.println(“Method=“+stackTraceElement.getMethodName());

这里的变化是将ex.getStackTrace()只是恰巧数组的最后一个元素就是首个元素而已.

ironSource移动聚合平台Mediation优势是什么啊

优势就有很多了,比如说吧,聚集了市面上全部的热门视频还有插屏广告渠道,保证不用多次集成。