我正在处理一个在控制台上运行的项目。有三个类文件。 Main.java,User.java Options.java。我使用args4j来解析命令行参数。
我是第一次从命令行编译项目。我用以下命令编译了项目:
javac -cp .:args4j-2.0.21.jar Main.java User.java Options.java
项目构建成功,我输入以下命令来运行项目:
java -cp .:args4j-tools-2.0.21.jar Main User Options
我收到了错误:
Exception in thread "main" org.kohsuke.args4j.IllegalAnnotationError: No OptionHandler is registered to handle class java.lang.Object
at org.kohsuke.args4j.CmdLineParser.createOptionHandler(CmdLineParser.java:166)
at org.kohsuke.args4j.CmdLineParser.addArgument(CmdLineParser.java:110)
at org.kohsuke.args4j.ClassParser.parse(ClassParser.java:38)
at org.kohsuke.args4j.CmdLineParser.<init>(CmdLineParser.java:93)
at ScatterBrain.main(ScatterBrain.java:48)
我必须输入哪个命令来构建项目?
MyOption Class:
import org.kohsuke.args4j.*;
import java.util.*;
public class MyOptions{
@Option(name="-r",usage="recursively run something")
private boolean recursive;
@Option(name="-str") // no usage
private String str = "(default value)";
@Option(name="-n",usage="usage can have new lines in it\n and also it can be long")
private int num;
// receives other command line parameters than options
@Argument
private List arguments = new ArrayList();
}
答案 0 :(得分:0)
问题的根本原因是我没有创建任何使用/处理参数的方法。
抱歉这个愚蠢的问题。
我写了“run”方法,并在同一个命令下构建。代码运行清晰。
对于“run”方法,请看下面的内容:
public void run(){
if( recursive )
System.out.println("-r flag is set");
System.out.println("-str was "+str);
if( num>=0 )
System.out.println("-n was "+num);
// access non-option arguments
System.out.println("other arguments are:");
for( String s : arguments )
System.out.println(s);
}