2012-06-19 5 views
0

Я использую Groovy для создания DSL, который будет обрабатывать BASIC-скрипты.Проблема со сканером класса

У меня есть строка, как это:

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

В конце концов, это, по-видимому, одна из тех (редких) областей, где BASIC обладает большей выразительностью, чем Java или Groovy. Чтобы решить эту проблему, мне пришлось изменить код окна (добавив JTextField для ввода ввода), напишите ActionListener и реализовать некоторую фиксацию. Не особенно сложно, но около 25 строк кода по сравнению с BASIC 1.

1

Я не знаю, если это опечатка в вопросе или реальной ошибки, но у вас есть:

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

это не должно быть это?

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

Но, возможно, это не повлияет на вашу нехватку возврата. Я предполагаю, что проблема в том, что входной поток текстовой области не является System.in. Вы должны проверить, какой поток используется и создать новый сканер вокруг этого потока, а не System.in.

+0

Спасибо, что указали это, но, к сожалению, это была только опечатка. Я посмотрю на проблему с входным потоком. – adrianmcmenamin