Groovy脚本挂起

我已经在WinXP(版本:Excel 97-2000)中设置了一个用户DSN ODBC数据源,用于一个非常简单的Excel电子表格:

A_NUMBER A_DATE A_STRING 1001 10/1/2012 Red 1002 10/2/2012 Green 1003 10/3/2012 Blue 

当我运行下面的groovy脚本(Groovy版本:1.7.8 JVM:1.6.0_10)来读取数据

 import groovy.sql.Sql def static main(def args) { def dbParameters = [url: 'jdbc:odbc:mySpreadSheet', user:'', password:'', driver: 'sun.jdbc.odbc.JdbcOdbcDriver'] def sql = Sql.newInstance(dbParameters) sql.eachRow('select * from [Sheet1$]') { row -> println "${row.A_NUMBER} ${row.A_DATE} ${row.A_STRING}" } sql.close() println "done???" } 

它会产生以下输出:

 1001.0 2012-10-01 00:00:00.0 Red 1002.0 2012-10-02 00:00:00.0 Green 1003.0 2012-10-03 00:00:00.0 Blue done??? 

但它永远不会退出!

我已经尝试从Windows命令提示符和cygwin bash shell运行它,在这两种情况下,它挂起,直到我用ctrl-c

我可以强制脚本通过添加退出

throw new RuntimeException("force exit")

在println之后,但看起来非常极端。

任何想法为什么脚本挂?

我使用你的代码自己设置了这个testing,完全按照原样进行,并且在完成脚本时没有任何问题。 我认为这与你的Cygwin shell有关。 如果你在普通的DOS shell中运行它,你可能会发现它正常退出。

 import groovy.sql.Sql def static main(def args) { def dbParameters = [url: 'jdbc:odbc:RefList10000', user:'', password:'', driver: 'sun.jdbc.odbc.JdbcOdbcDriver'] def sql = Sql.newInstance(dbParameters) sql.eachRow('select * from [referenceList10000$]') { row -> println "${row.RefListName} ${row.Value}" } sql.close() println "done" } 

由:

 @echo off :: Microsoft Windows [Version 6.1.7601] SET JAVA_HOME=C:\Java\jdk1.6.0_33_x32 SET PATH=%JAVA_HOME%\bin;%PATH% groovy SQL.gv pause 

从来没有真正find答案,但是最好的build议是从拉尔夫那里join这条线

 System.exit(0) 

在主要方法的结尾。