![](/img/trans.png)
[英]How can I solve this problem? “Error executing tag <export:formats>: groovy.lang.MissingMethodException: ”
[英]Why Can't I catch Groovy's MissingMethodException?
我正在使用一种静态方法进行异常处理。 我已经发现了MissingMethodException(通过反复试验),但是当我编写代码来捕获它时,Grails 2.3.11忽略了catch块。 甚至没有使用默认的Exception。 为什么没有捕获到异常?
package utility
import java.text.SimpleDateFormat
class DateUtility {
static String getGrailsDefaultDate(String datetm) {
def format = new SimpleDateFormat("YYYYMMddHHmmss")
try{
def date = format.parse(datetm)
date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(date)
datetm = date.toString()
}
catch(IllegalArgumentException iae){
datetm = "An error occured retrieving the date"
}
catch(NullPointerException npe){
datetm = "A date was not provided"
}
catch(java.text.ParseException pe){
datetm = "Unparseable date"
}
catch(groovy.lang.MissingMethodException mme){
datetm = "A missing method occured"
}
catch(Exception e){
datetm = "default exception"
}
return datetm
}
}
这是应该引发缺少的方法异常的调用:
DateUtility.getGrailsDefaultDate(1)
为什么没有捕获到异常?
您的catch
块将仅捕获从try
块引发的异常。 在try
块中没有会引发MissingMethodException
表达式,因此捕获MissingMethodException
catch
块将不会被调用。 这一切看起来都按设计工作。
如果将DateUtility.getGrailsDefaultDate(1)
放在一个try
块中,该try
块具有与catch
块相关联的catch
块,该catch
块会捕获MissingMethodException
,那么将调用该catch
块。
尝试这个...
class DateUtility {
static String getGrailsDefaultDate(String datetm) {
def format = new SimpleDateFormat("YYYYMMddHHmmss")
try{
def date = format.parse(datetm)
date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").format(date)
datetm = date.toString()
}
catch(IllegalArgumentException iae){
datetm = "An error occured retrieving the date"
}
catch(NullPointerException npe){
datetm = "A date was not provided"
}
catch(java.text.ParseException pe){
datetm = "Unparseable date"
}
catch(groovy.lang.MissingMethodException mme){
datetm = "A missing method occured"
}
catch(Exception e){
datetm = "default exception"
}
return datetm
}
static void main(args) {
try {
DateUtility.getGrailsDefaultDate(1)
} catch (MissingMethodException mme) {
println 'I Caught The Exception!'
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.