You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行ANTLR示例提示“Could not find or load main class Test”的原因排查

排查ANTLR代码运行时“Could not find or load main class Test”问题

遇到这个问题大多是Java类路径配置或者编译运行流程的问题,结合你的ANTLR代码场景,我给你梳理几个关键排查点:

1. 包结构与运行命令的匹配问题

你的Test类声明在antlrs包下,这意味着编译后,Test.class应该位于一个名为antlrs的文件夹中(目录结构要和包名严格对应)。

  • 错误的运行方式:直接进入antlrs文件夹执行java Test,Java无法识别antlrs.Test这个完整类名。
  • 正确的运行方式:回到包含antlrs文件夹的根目录,执行java antlrs.Test。同时别忘了把ANTLR的jar包加入类路径,比如:
    # Linux/macOS环境
    java -cp ".:antlr-4.13.1-complete.jar" antlrs.Test
    # Windows环境
    java -cp ";antlr-4.13.1-complete.jar" antlrs.Test
    

2. 编译环节的类路径配置

编译Test.java时,必须把ANTLR的jar包加入类路径,否则编译器找不到org.antlr.v4.runtime相关的类。正确的编译命令示例:

# Linux/macOS环境
javac -cp "antlr-4.13.1-complete.jar" antlrs/Test.java
# Windows环境
javac -cp "antlr-4.13.1-complete.jar" antlrs\Test.java

如果你的ArrayInitLexer和ArrayInitParser是ANTLR生成的类,也要确保它们已经被正确编译,并且和Test.class在同一个类路径下。

3. 确认ANTLR生成类的存在与位置

你的代码里用到了ArrayInitLexer和ArrayInitParser,这些类需要先通过ANTLR工具从你的语法文件(比如ArrayInit.g4)生成。生成时要指定包名,确保和Test类同包:

antlr4 -package antlrs ArrayInit.g4

生成后会得到ArrayInitLexer.java、ArrayInitParser.java等文件,把它们放到antlrs目录下,和Test.java一起编译。

4. 文件名与类名的一致性检查

Java要求类名和对应的.java文件名严格一致(包括大小写),比如Test类对应的文件必须是Test.java,如果文件名写成test.java,在区分大小写的系统(Linux/macOS)上编译运行都会出问题。

附上你的代码供参考:

package antlrs;
import org.antlr.v4.runtime.*;
public class Test {
    public static void main(String[] args) throws Exception {
        CharStream inputStream = CharStreams.fromFileName("firstTest.txt");
        ArrayInitLexer lexer = new ArrayInitLexer(inputStream);
        ArrayInitParser parser = new ArrayInitParser(new CommonTokenStream(lexer));
        parser.addParseListener(new ArrayInitBaseListener());
        parser.init();
    }
}

内容的提问来源于stack exchange,提问作者Keitos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:27:58