0

我正在使用 Groovy 构建将处理 BASIC 脚本的 DSL。

我有这样的一行:

100 INPUT V

这是由一个正则表达式提取的,它将一些代码注入正在执行的脚本中:

    def retString = "scan = new Scanner(System.in);"
    retString += "${matcher[0][1]} ="
    retString += "scan.nextLine()\n"
    return retString

此代码已正常执行但永远不会返回(即 Scanner 永远不会从 nextLine() 返回,因此不会返回 V/matcher[0][1] 的值,而是无论多少次代码都卡在等待键盘输入我按了回车键。)

我在这里投票错了什么?输入在输入时在 TextArea 中回显(即,这是当时的焦点) - 它与此有关吗?

4

2 回答 2

1

我不知道这是问题中的拼写错误还是真正的错误,但您有:

retString + "${matcher[0][1]} ="

不应该是这个吗?

retString += "${matcher[0][1]} ="

但是,这可能不会影响您缺乏回报。我猜测问题是文本区域的输入流不是System.in。您应该检查正在使用的流并围绕该流而不是 System.in 创建一个新的扫描仪。

于 2012-06-19T19:19:04.130 回答
0

最后,这似乎是 BASIC 比 Java 或 Groovy 具有更强表达能力的那些(罕见)领域之一——为了解决这个问题,我不得不改变窗口代码(添加一个 JTextField 来接受输入),编写一个 ActionListener 并实现一些闭锁。与 BASIC 的 1 相比,不是特别难,但大约 25 行代码。

于 2012-06-20T17:41:32.640 回答