在Java中使用外部库错误:没有注册OptionHandler来处理类java.lang.Object

时间:2014-08-07 12:10:12

标签: java args4j

我正在处理一个在控制台上运行的项目。有三个类文件。 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();


}

1 个答案:

答案 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);


}