我在我的Java应用程序中添加了异常处理,并且无法理解为什么在某些情况下异常方法e.getMessage()
或e.getLocalizedMessage()
返回的字符串包括我的自定义Exception类的包。
这就是我配置它的方式:
MyCustomException:
package project.be.exception;
public class MyCustomException extends Exception{
public MyCustomException() {
}
public MyCustomException(String arg0) {
super(arg0);
}
public MyCustomException(Throwable arg0) {
super(arg0);
}
public MyCustomException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public MyCustomException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
}
MyServiceCaller:
public class MyServiceCaller implements HISException DefaultRESTService<DefaultModel>{
public DefaultResponse get(Service_Api service, Object caller, Object param) throws MyCustomException {
try{
...
} catch (Exception e){
throw new MyCustomException ("Hello message exception");
}
}
}
MyBussinessClass:
...
try{
new MyServiceCaller().get(service, param1, param2);
} catch(MyCustomException e){
System.out.println(e.getLocalizedMessage());
}
...
控制台输出:
project.be.exception: Hello message exception
我想只打印没有先前包的邮件。有什么建议吗?
EDIT1:
使用Exception.getMessage()输出相同,因此我放弃了可能的重复问题: Difference between e.getMessage() and e.getLocalizedMessage()
SOLUTION:
正如isaac提到的那样,我将抛出的异常包装在另一个异常中,因此e.getMessage()
和e.getLocalizedMessage()
会显示该包。
在我的情况下解决输出很容易调用e.getCause().getMessage()
而不是e.getMessage()
和e.getLocalizedMessage()
。
答案 0 :(得分:0)
我建议您使用日志系统而不是使用Java SysOut:System.out.println(...)
。使用日志记录系统,您可以定义日志的格式。
以下是java.util.logging
:
您可以定义自己的日志记录格式。这是Formatter
的一个示例,它只显示任何异常的消息:
public class MyFormatter extends Formatter {
public String format(LogRecord record) {
StringBuilder builder = new StringBuilder();
builder.append(formatMessage(record));
builder.append("\n");
return builder.toString();
}
}
然后您可以按如下方式使用它:
public class MyClass {
// Your logger
private static Logger logger ;
// Static initialization block for the logger
static {
logger = Logger.getLogger("MyClass");
try {
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(new MyFormatter());
logger.addHandler(handler);
} catch (IOException e) {
logger.log(Level.SEVERE, "Failed to initialize Handler", e);
}
}
//...
}
请注意,配置日志记录系统的方法不正确。关键是要说明它是如何工作的。在实际应用程序中,您可以使用系统属性,配置文件等...
为了正确配置记录器,我们提供了多种解决方案。看看这个Stack溢出问题:
我希望这会对你有所帮助。