我正在使用Groovy构建一个可以处理BASIC脚本的DSL。
我有这样一句话:
100 INPUT V
正则表达式将其注入正在执行的脚本中的一些代码:
def retString = "scan = new Scanner(System.in);"
retString += "${matcher[0][1]} ="
retString += "scan.nextLine()\n"
return retString
此代码已正确执行但永远不会返回(即扫描程序永远不会从nextLine()返回,因此不返回V / matcher [0] [1]的值,而是代码卡在等待键盘输入,无论如何我按下回车键的次数。)
我在这里投了什么错?输入在TextArea中被回显,因为它被输入(即这是当时的焦点) - 它与之相关吗?
答案 0 :(得分:1)
我不知道这是问题中的拼写错误还是真正的错误,但你有:
retString + "${matcher[0][1]} ="
不应该是这个吗?
retString += "${matcher[0][1]} ="
但是,这可能不会影响你的回报。我猜测问题是文本区域的输入流不是System.in。您应该检查以查看正在使用的流,并在该流周围创建一个新的扫描程序而不是System.in。
答案 1 :(得分:0)
最后,这似乎是BASIC比Java或Groovy更具表现力的那些(罕见)领域之一 - 要解决这个问题,我必须改变窗口代码(添加JTextField以接受输入),编写一个ActionListener并实现一些锁存。与BASIC的1相比,并不是特别困难,但大约有25行代码。