Grails 为什么我不能捕获Groovy的MissingMethodException?
我正在我的一个静态方法中处理异常。我通过反复试验发现了MissingMethodException,但当我编写代码捕获它时,Grails2.3.11忽略了catch块。甚至没有使用默认的异常。为什么没有捕获异常Grails 为什么我不能捕获Groovy的MissingMethodException?,grails,groovy,exception-handling,missingmethodexception,Grails,Groovy,Exception Handling,Missingmethodexception,我正在我的一个静态方法中处理异常。我通过反复试验发现了MissingMethodException,但当我编写代码捕获它时,Grails2.3.11忽略了catch块。甚至没有使用默认的异常。为什么没有捕获异常 package utility import java.text.SimpleDateFormat class DateUtility { static String getGrailsDefaultDate(String datetm) { def for
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.getGrailsDefaultDate1
为什么没有捕获异常
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
}
}
您的catch块只捕获从try块抛出的异常。try块中没有将抛出MissingMethodException的表达式,因此不会调用捕获MissingMethodException的catch块。这一切看起来都在按设计工作
如果将DateUtility.getGrailsDefaultDate1放在一个try块中,该try块具有一个与之关联的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!'
}
}
}
您可以在上述方法之外调用它。“你有没有尝试过用上述方法以外的方法来捕捉它,即:你把它叫在哪里?”tim_yates说,确实有效。在我的方法中,引发MissingMethodException的行是def date=format.parsedatetm,其中用1替换datetm。为什么我不能在DateUtility类中捕获带有整数1的异常?或者字符串1?整数1,如OP中所示。您确定在format.parsedatetm处引发异常吗?您指定getGrailsDefaultDate接受字符串,您是对的。我想tim_yates不觉得他们需要发布官方答案,所以我会接受你的答案,因为你经历了麻烦。我确实希望在方法中捕获异常,因此我将参数类型从String更改为def。谢谢。我没有读评论,所以没有看到蒂姆在那里回应。如果他发布了相同的答案,请将“接受”移动给他。我真的不在乎得到绿色支票。我是想帮忙。