我正在尝试解决问题,在我的应用程序中我有这个代码
try {
object1.method1();
} catch(Exception ex) {
JOptionPane.showMessageDialog(nulll, "Error: "+ex.getMessage());
}
并且object1会做类似的事情:
public void method1() {
//some code...
throw new RuntimeException("Cannot move file");
}
我的选项窗格中出现了这样的问题,如下所示:
Error: java.lang.RuntimeException: Cannot move file
但是我使用了getMessage
而不是toString
方法,因此不应该出现该类的名称,对吧?
我做错了什么?
我已经尝试过很多例外,甚至是Exception
本身。我希望解决这个问题,而不需要实现我自己的Exception
子类
问题已解决 - 谢谢大家!
实际上是在SwingWorker的 get()方法中调用了try和catch,它构造了一个ExecutionException
,我的异常是从 doInBackground()引发的
我修好了这个:
@Override
protected void done() {
try {
Object u = (Object) get();
//do whatever u want
} catch(ExecutionException ex) {
JOptionPane.showMessageDialog(null, "Error: "+ex.getCause().getMessage());
} catch(Exception ex) {
JOptionPane.showMessageDialog(null, "Error: "+ex.getMessage());
}
}
答案 0 :(得分:28)
我认为你将异常包装在另一个异常中(不在上面的代码中)。如果你试试这段代码:
public static void main(String[] args) {
try {
throw new RuntimeException("Cannot move file");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage());
}
}
...你会看到一个弹出窗口,上面写着你想要的内容。
但是,要解决您的问题(包装的异常),您需要使用“正确”消息进入“root”异常。为此,您需要创建一个自己的递归方法getRootCause
:
public static void main(String[] args) {
try {
throw new Exception(new RuntimeException("Cannot move file"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,
"Error: " + getRootCause(ex).getMessage());
}
}
public static Throwable getRootCause(Throwable throwable) {
if (throwable.getCause() != null)
return getRootCause(throwable.getCause());
return throwable;
}
注意:然而,解开这样的异常会破坏抽象。我鼓励你找出异常被包装的原因并问自己是否有意义。
答案 1 :(得分:6)
我的猜测是你在method1
中有一些东西在另一个异常中包含一个异常,并使用嵌套异常的toString()
作为包装器的消息。我建议你复制你的项目,尽可能多地删除,同时保留问题,直到你得到一个简短而完整的程序来证明它 - 此时要么清楚发生了什么,要么我们会更好地帮助解决它。
这是一个简短但完整的程序,可以证明RuntimeException.getMessage()
行为正确:
public class Test {
public static void main(String[] args) {
try {
failingMethod();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
private static void failingMethod() {
throw new RuntimeException("Just the message");
}
}
输出:
Error: Just the message