Also available as CmdLine2.java

/**
 * Title: CmdLine2
 * Description: Demo of custom exception
 * @author hollingd@cs.rpi.edu
 */

// create our own type of exception
// exceptions are just objects !

class CmdLineException extends Exception {
    CmdLineException(){}
    CmdLineException(String s) { super(s); }
}


//  a class that can convert an array of Strings to
//  to an array of integers.
class CmdLineInts {
    int x[];
    // Constructor with just args, in this case we
    // don't care how many are specified on the command line,
    //  we convert them all
    CmdLineInts(String args[] )  throws CmdLineException {
        x = new int[args.length];

        int i=0;
        try {
            for (i=0;i<args.length;i++) 
                x[i] = Integer.parseInt(args[i]);
        } catch (NumberFormatException nfe) {
            throw new CmdLineException("Invalid argument format: " + args[i]);
        } catch (Exception e) {
            throw new CmdLineException("Unknown command line error");
        }
    }

    // Constructor with args and number of args.
    CmdLineInts(String args[], int num )  throws CmdLineException, Exception {
        x = new int[num];

        int i=0;
        try {
            for (i=0;i<num;i++) 
                x[i] = Integer.parseInt(args[i]);
        } catch (NumberFormatException nfe) {
            throw new CmdLineException("Invalid argument format: " + args[i]);
        } catch (ArrayIndexOutOfBoundsException ae) {
            throw new CmdLineException("Not enough args");
        } catch (Exception up) {
            // here is an example of re-throwing an exception
            // (unmodified).
            throw up;
        }

    }
                

    public int []GetInts() {
        return(x);
    }
}


public class CmdLine2{

    public static void main(String[] args) {
        int x[];

        try {
            CmdLineInts c = new CmdLineInts(args);
            x = c.GetInts();

            // print out the ints.
            System.out.print("Args: ");
            for (int i=0;i<x.length;i++) {
                System.out.print(x[i]+ " ");
            }
            // just print newline
            System.out.println();

        } catch (Exception e) {
            e.printStackTrace(System.out);
        }

        // now try but insist on at least 3 ints

        try {
            CmdLineInts c = new CmdLineInts(args,3);
            x = c.GetInts();

            // print out the ints.
            System.out.print("Args: ");
            for (int i=0;i<x.length;i++) {
                System.out.print(x[i]+ " ");
            }
            // just print newline
            System.out.println();

        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
}