gpt4 book ai didi

java - args4j : What argument threw the CommandLineException during the parsing?

转载 作者:行者123 更新时间:2023-12-01 15:24:23 25 4
gpt4 key购买 nike

我正在使用 args4j 来解析提供给我的程序的参数。

这是我定义 2 个日期类型参数的代码。该处理程序仅解析给定的日期,如果日期格式错误,则抛出 CommandLineException。

@Option(name="-b", metaVar="<beginDate>", handler=DateOptionHandler.class, usage="...")
private Date beginDate;

@Option(name="-e", metaVar="<endDate>", handler=DateOptionHandler.class, usage="...")
private Date endDate;

如果 beginDate 或 endDate 引发异常,我需要能够返回不同的代码(int 值)。

目前,我的主要方法如下所示:

CmdLineParser parser = new CmdLineParser(this);
parser.setUsageWidth(120);

try {
parser.parseArgument(args);
} catch (CmdLineException e) {
/* Print usage if an error occurs during the parsing */
System.err.println(e.getMessage());
System.err.println("Usage : java LaunchProgram [options]");
e.getParser().printUsage(System.err);

/* What I need to do : */
if(optionWhichThrewTheException.equals("-b") return 2;
if(optionWhichThrewTheException.equals("-e") return 3;

/* Other arguments */
return -1;
}

但我不知道如何知道哪个参数引发了异常(我查看了 CmdLineException 方法,但什么也没发现)。

有没有办法获取无法解析的参数?

预先感谢您的帮助。

最佳答案

我从未使用过args4j,但查看其文档,似乎异常是由选项处理程序抛出的。因此,使用 BDateOptionHandler 和 EDateOptionHandler,它们会抛出包含所需信息的 CmdLineException 自定义子类:

public class BDateOptionHandler extends DateOptionHandler {
@Override
public int parseArguments(Parameters params) throws CmdLineException {
try {
super.parseArguments(params);
}
catch (CmdLineException e) {
throw new ErrorCodeCmdLineException(2);
}
}
}

public class EDateOptionHandler extends DateOptionHandler {
@Override
public int parseArguments(Parameters params) throws CmdLineException {
try {
super.parseArguments(params);
}
catch (CmdLineException e) {
throw new ErrorCodeCmdLineException(3);
}
}
}

...
try {
parser.parseArgument(args);
}
catch (CmdLineException e) {
...
if (e instanceof ErrorCodeCmdLineException) {
return ((ErrorCodeCmdLineException) e).getErrorCode();
}
}

关于java - args4j : What argument threw the CommandLineException during the parsing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10384870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com