(Android) ANTLRStringStream抛出异常



我一直在尝试让ANTLR-3.5-complete.jar在Android应用程序上工作,但我不能让它工作!Bart Kiers的答案对我帮助很大,但我仍然不能让它工作。

我试图使一个按钮,当点击时,将根据我的语法验证EditText视图中的文本是否正确。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");
    }
}

下面是我在日志中看到的:

    <
  • 实例化视图/gh>
  • 从EditText获取源码
  • source = test33
  • <
  • 实例化流/gh>

然后弹出"不幸的是,TestAntlrApp已停止"窗口。

编辑:这是我更多的日志。

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类?然而,在代码中似乎没有错误/警告,我甚至可以看到类的层次结构。

由于最近的ADT更新,您不能使用Eclipse的常规方式将外部库添加到Build Path中。相反,您必须将它放在libs文件夹中,以便将其打包到.apk中。如果您只是将其添加到构建路径中,则在构建.apk时将忽略它。

症状:应用程序无法识别外部库类。

解决方案:将.jar文件放在libs文件夹中。

相关内容

  • 没有找到相关文章

最新更新