Throwable getMessage()的奇怪输出

时间:2010-03-12 12:17:26

标签: java exception

嗨,我有以下伪代码,抛出这样的异常

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发生了什么事?

我正在使用Struts 1.2.4,我正在查看它的源代码,但任何指针都将非常感激。

3 个答案:

答案 0 :(得分:2)

编辑:这个答案是在问题发生重大变化之前编写的。

“??? 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”作为输出(正如预期的那样)。

答案 1 :(得分:1)

为避免ActionMessage尝试将您的文字消息解释为关键用途this constructor

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

boolean参数指定String参数是否将被解释为要查找的代码(true)或文字消息(false)。< / p>

答案 2 :(得分:0)

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

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

为什么?

还不确定。你可以发表整个MyException课程吗?