So habe ich eine Options
Instanz, die unter anderen Optionen hat (die isRequired()
bemerken):Wie kann ich eine ParserException für erforderliche Optionen vermeiden, wenn Benutzer nur die Verwendung drucken möchte?
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"));
Wenn ich rufe parser.parse(args)
eine Ausnahme auslöst, wenn seq1
und seq2
nicht vorhanden sind - aber ich will es meine Nachricht drucken haben und keine Ausnahme geworfen - wie man das macht? Dies wirft NPE in line.hasOption("help")
, natürlich:
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);
}
Wenn der Parameter parser.parse() eine ParseException auslöst, wird kein Wert zurückgegeben. So funktionieren Java-Ausnahmen. Daher müssen Sie wahrscheinlich die Originalargumente selbst überprüfen, um zu sehen, ob die 'Hilfe'-Option bestanden wurde. – GreyBeardedGeek
@GreyB: Ich weiß (beachten Sie die _natürlich _) - Ich bin mir sicher, es muss einen anderen Weg geben - eigentlich fand ich einen Workaround, aber ich hoffe, jemand kenntnisreicher wird antworten - sonst werde ich meine Problemumgehung als Antwort –