gpt4 book ai didi

java - 带有类名的 exception.getMessage() 输出

转载 作者:IT老高 更新时间:2023-10-28 21:12:41 26 4
gpt4 key购买 nike

我正在尝试解决一个问题,在我的应用程序中我有此代码

try {
object1.method1();
} catch(Exception ex) {
JOptionPane.showMessageDialog(nulll, "Error: "+ex.getMessage());
}

object1 会做这样的事情:

public void method1() {
//some code...
throw new RuntimeException("Cannot move file");
}

我在选项 Pane 中收到如下消息:错误:java.lang.RuntimeException:无法移动文件

但我使用的是 getMessage 而不是 toString 方法,所以类的名称不应该出现,对吧?

我做错了什么?我已经尝试了很多异常,甚至是 Exception 本身。我正在寻找解决这个问题,而不需要实现我自己的 Exception 子类

问题已解决 - 谢谢大家!

try 和 catch 实际上是在 SwingWorker 的 get() 方法中调用的,该方法构造了一个 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());
}
}

最佳答案

我认为您将异常包装在另一个异常中(不在您上面的代码中)。如果你试试这个代码:

public static void main(String[] args) {
try {
throw new RuntimeException("Cannot move file");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage());
}
}

...您将看到一个弹出窗口,其中包含您想要的内容。


但是,要解决您的问题(包装异常),您需要使用“正确”消息访问“根”异常。为此,您需要创建一个自己的递归方法 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;
}

注意:然而,像这样展开异常会破坏抽象。我鼓励您找出异常被包装的原因,并问问自己这是否有意义。

关于java - 带有类名的 exception.getMessage() 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com