我希望在生成异常时使用java获取错误消息。
现在我有以下场景的java代码:
method first(){
try{
second();
}catch(Exception e){
System.out.println("Error:> "+e)
}
}
method second(){
try{
my code
}catch(Exception e){
throw new Exception("Exception generate in second method",e);
}
}
现在当第一个方法执行时,我只得到“在第二个方法中生成异常”消息,但是在java上有一些其他消息在控制台上打印,所以如何获取该控制台错误消息。
注意:我已经尝试使用e.getMessage();和e.printStackTrace();
答案 0 :(得分:1)
每个例外都有getCause()
的原因。您可以递归地向下移动它们,直到找到根本原因。下面是一个使用实用程序的示例,该实用程序使用控制台执行的所有原因转储异常。
private void first() {
try {
second();
} catch (Exception ex) {
Log.e("CATCH", getExceptionDump(ex));
}
}
private void second() {
try {
throw new UnsupportedOperationException("We don't do this.");
} catch (Exception ex) {
throw new RuntimeException("Exception in second()", ex);
}
}
private String getExceptionDump(Exception ex) {
StringBuilder result = new StringBuilder();
for (Throwable cause = ex; cause != null; cause = cause.getCause()) {
if (result.length() > 0)
result.append("Caused by: ");
result.append(cause.getClass().getName());
result.append(": ");
result.append(cause.getMessage());
result.append("\n");
for (StackTraceElement element: cause.getStackTrace()) {
result.append("\tat ");
result.append(element.getMethodName());
result.append("(");
result.append(element.getFileName());
result.append(":");
result.append(element.getLineNumber());
result.append(")\n");
}
}
return result.toString();
}
答案 1 :(得分:0)
异常构造函数参数中的消息未打印在异常详细信息中。 您只需使用此代码即可打印消息:
method first(){
try{
second();
}catch(Exception e){
System.out.println("Error:> "+e.getMessage())
}
}
希望这能解决您的问题
答案 2 :(得分:0)
为什么不能使用打印堆栈跟踪?
因为A throwable contains a snapshot of the execution stack of its thread at the time it was created.
(请参阅Throwable)
这意味着,如果你想打印堆栈跟踪,你需要在第二种方法中使用printStackTrace()
方法BUT!
method second(){
try {
my code
} catch(Exception e) {
e.printStackTrace();
throw new Exception("Exception generate in second method",e);
}
}
或使用棘手的方法setStackTrace
并在第一个
printStackTrace()
method second(){
try {
my code
} catch(Exception e) {
Exception ex = new Exception("Exception generate in second method",e);
ex.setStackTrace(e);
throw ex;
}
}
method first(){
try {
second();
} catch(Exception e) {
e.printStackTrace();
}
}
答案 3 :(得分:0)
您可以打印您获得的例外原因。试试这个:
method first(){
try{
second();
}catch(Exception e){
System.out.println("Error:> "+e);
if (e.getCause() != null) {
System.out.println("Cause:> " + e.getCause());
}
}
}
答案 4 :(得分:0)
我相信这是您想要实现的控制台消息:
Error:> java.lang.Exception: Exception generate in second method
尝试此代码时,当第二个方法的catch块抛出异常时,第二个方法应该将其声明为throws或将一个嵌套的try catch放入catch块中。
异常传播到第一个()方法,该方法由其catch块处理。
public class Test {
public void first() {
try {
second();
} catch (Exception e) {
System.out.println("Error:> " + e);
}
}
public void second() throws Exception {
try {
throw new Exception();
} catch (Exception e) {
throw new Exception("Exception generate in second method", e);
}
}
public static void main(String ars[]) {
Test test = new Test();
test.first();
}
}