有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Trowable getMessage()的java输出

嗨,我有下面的伪代码,抛出了这样一个异常

throw new MyException("Bad thing happened","com.stuff.errorCode");

其中MyException扩展了Exception类。下面是我如何处理这个异常

 ActionMessages errors = new ActionMessages();
if(ex.getErrorCode() != null && !"".equals(ex.getErrorCode()))
error = new ActionMessage(ex.getErrorCode()); // com.stuff.errorCode is the errorCode
else
error = new ActionMessage(ex.getMessage()); //"Bad thing happened" is error message
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
//errors.add(Globals.MESSAGE_KEY, error );
saveErrors( requ, errors );
return (mapping.findForward(nextScreen));

现在,在用户屏幕上,消息显示为

???en_US.Bad thing happened???

我正在使用Struts 1.2.4,我正在研究它的源代码,但任何指针都将非常感谢


共 (3) 个答案

  1. # 1 楼答案

    编辑:这个答案是在问题发生实质性变化之前写的

    “en_US”必须来自其他地方(可能是用于打印消息的web框架),因为Exception本身不进行任何查找

    编译以下代码:

    public class MyException extends Exception {
      public MyException(String msg, String sErrorCode) {
        super(msg);
        // ignore sErrorCode
      }
    }
    
    public class MyExceptionTest {
      public static void main(String[] args) {
        System.out.println(new MyException("foo", "bar").getMessage());
      }
    }
    

    然后运行MyExceptionTest,您将看到一个简单的“foo”作为输出(正如预期的那样)

  2. # 2 楼答案

    要避免ActionMessage试图将文字信息解释为密钥,请使用this constructor

    error = new ActionMessage(ex.getMessage(), false);
    

    boolean参数指定String参数将被解释为要查找的代码(true)还是文本消息(false

  3. # 3 楼答案

    Java正在寻找包含错误消息本地化版本的应用程序资源

    这就是为什么???是我们吗???事情是这样的。出于某种原因,它认为您正在引用一个关键的“坏事情发生了”,并正在寻找本地化(即翻译)消息

    为什么

    还不确定。你能把你的整个MyException课发出去吗