Well, that's enlightening, I wasn't aware that an exception thrown by main caused an exit status of 1. That definitely sounds like the right approach. If it's not a commonly accepted practice, it should be :)

David

Kathey Marsden wrote:

David Van Couvering wrote:


We could add an argument that indicates whether or not the main
program should call System.exit() or just return.  It's very valuable
to have a non-zero exit status when calling a command from the
command-line, for better scriptability...

e.g. "-noSysExit"

But I think what would be better is if applications like Eclipse don't
call main() but call the execute() method, which only throws an
exception.   This same issue exists for all the Derby tools, and it
would be good if we had a policy that didn't require a "-noSysExit"
option on every command.

I can add an execute() method to NetworkServerControl so it's on the
same class as the main() method.


What do you think about main throwing an exception?  If we can do that
then it might  avoid changing the public API or doc.
I don't know if that is a commonly accepted practice or not. I tried this.

public static void main(String[] args) throws Exception
    {
        conntype = null;
        if (args.length < 1 || args[0].equals("throw"))
            throw new Exception ("main throws exception");
        else if (args[0].equals("exit0"))
                 System.exit(0);
        else if (args[0].equals("exit1"))
            System.exit(1);
        else if (args[0].equals("return"))
            return;
    }
$ java MainException throw
Exception in thread "main" java.lang.Exception: main throws exception
        at MainException.main(MainException.java:20)
$ echo $?
1
$ java MainException return
$ echo $?
0
$ java MainException exit1
$ echo $?
1
$ java MainException exit0
$ echo $?
0



Reply via email to