2013-05-01 5 views
0

Я пытался получить 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? Однако в коде нет ошибок/предупреждений, и я даже вижу иерархию класса.

+0

Что произойдет, если вы используете версию ANTLR, упомянутую в этом предыдущем ответе? –

+0

А какое исключение бросали? Замените свой 'catch' на это и опубликуйте то, что вы видите в своем лог-cat:' catch (Exception e) { Log.e («TestDebug», «Exception catch:», e); } ' –

+0

@BartKiers Я попробую изменить версию ANTLR и посмотреть, что произойдет! Я изменил 'catch', но код никогда не получает excecuted. Он выходит из строя в 'try', не доходя до' catch', поэтому мой выход журнала остается неизменным. Редактировать: v3.3, похоже, удален с веб-сайта ANTLR. Я могу найти только v3.5. – Cramps

ответ

0

Из-за недавнего обновления ADT вы не можете просто добавлять внешние библиотеки в путь сборки, используя обычный способ Eclipse. Вместо этого вы должны поместить его в папку libs, чтобы она была упакована в .apk. Если вы просто добавите его в путь сборки, он будет проигнорирован при создании вашего .apk.

Признак: приложение не распознало классы внешней библиотеки.

Решение: Поместите файл .jar в папку libs.

Смежные вопросы