Я пытался получить ANTLR-3.5-complete.jar для работы с Android-приложением, но я не могу заставить его работать! Ответ Барта Кирса HERE мне очень помог, но я все еще не могу заставить его работать.(Android) Исключение исключения ANTLRStringStream
Я пытаюсь сделать кнопку, которая при нажатии будет проверять правильность текста в редакторе EditText в соответствии с моим grammar.g, но не имеет значения, правильно ли введенный текст или нет, мое приложение всегда сбой, когда я нажимаю кнопку при создании ANTLRStringStream. Вот что у меня есть:
public void onClickVerify(View v) throws TypeNotPresentException {
String source = "foobar";
Log.e("TestDebug", "Instantiating views");
TextView out = (TextView) findViewById(R.id.textView1);
EditText in = (EditText) findViewById(R.id.editText1);
try {
Log.e("TestDebug", "Getting source from EditText");
source = in.getText().toString();
Log.e("TestDebug", "source = " + source);
Log.e("TestDebug", "Instantiating stream");
ANTLRStringStream stream = new ANTLRStringStream(source);
Log.e("TestDebug", "Instantiating lexer");
grammarLexer lexer = new grammarLexer(stream);
Log.e("TestDebug", "Instantiating parser");
grammarParser parser = new grammarParser(
new BufferedTokenStream(lexer));
Log.e("TestDebug", "Applying rule to parser");
out.setText(source + " = " + !parser.failed());
} catch (IllegalStateException ise) {
out.setText("Exception caught");
}
}
И вот что я вижу в журналах:
- инстанцировании просмотров
- Попадая источник из EditText
- источника = test33
- Инстанцирование поток
А затем «К сожалению, Tes tAntlrApp остановился. появится окно.
EDIT: Вот еще мой логарифм.
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3591)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.view.View$1.onClick(View.java:3586)
... 11 more
Caused by: java.lang.NoClassDefFoundError: org.antlr.runtime.ANTLRStringStream
at com.test.antlr.MainActivity.onClickVerify(MainActivity.java:89)
Что-то о том, чтобы не найти класс класса ANTLRStringStream? Однако в коде нет ошибок/предупреждений, и я даже вижу иерархию класса.
Что произойдет, если вы используете версию ANTLR, упомянутую в этом предыдущем ответе? –
А какое исключение бросали? Замените свой 'catch' на это и опубликуйте то, что вы видите в своем лог-cat:' catch (Exception e) { Log.e («TestDebug», «Exception catch:», e); } ' –
@BartKiers Я попробую изменить версию ANTLR и посмотреть, что произойдет! Я изменил 'catch', но код никогда не получает excecuted. Он выходит из строя в 'try', не доходя до' catch', поэтому мой выход журнала остается неизменным. Редактировать: v3.3, похоже, удален с веб-сайта ANTLR. Я могу найти только v3.5. – Cramps