Więc mam instancję Options
która między innymi opcjami został (zawiadomienie isRequired()
):Jak można uniknąć wyjątku ParserException dla wymaganych opcji, gdy użytkownik chce wydrukować tylko użycie?
options.addOption(OptionBuilder
.withLongOpt("seq1")
.withDescription("REQUIRED : blah blah")
.hasArg().isRequired().create());
options.addOption(OptionBuilder
.withLongOpt("seq2")
.withDescription("REQUIRED : blih blih")
.hasArg().isRequired().create());
options.addOption(new Option("?", "help", false,
"print this message and exit"));
Kiedy zadzwonić parser.parse(args)
zgłasza wyjątek, jeśli seq1
i seq2
nie są obecne - ale chcę mieć go wydrukować moją wiadomość i nie ma wyjątku - jak to zrobić? To rzuca NPE w line.hasOption("help")
, naturalnie:
CommandLine line = null;
try {
CommandLineParser parser = new GnuParser();
// parse the command line arguments
line = parser.parse(options, args);
} catch (ParseException e) {
if (line.hasOption("help")) { //NPE
usage(0);
}
System.err.println("Parsing failed. Reason: " + e.getMessage());
usage(1);
}
private static void usage(int exitCode) {
// automatically generate the help statement
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("Smith Waterman", OPTIONS, true);
System.exit(exitCode);
}
gdy parser.parse() zgłasza wyjątek ParseException, żadna wartość nie jest zwracana. Tak działają wyjątki java. Najprawdopodobniej będziesz musiał sam sprawdzić oryginalne argumenty, aby sprawdzić, czy opcja "pomoc" została zaliczona. – GreyBeardedGeek
@GreyB: Wiem (zauważ, że _ _ _ _ __) - Jestem pewien, że musi istnieć inny sposób - w rzeczywistości znalazłem obejście, ale mam nadzieję, że odpowie na nie ktoś bardziej kompetentny - inaczej opiszę to jako odpowiedź –