Zoeken…


Syntaxis

  • public static void main (String [] args)

parameters

Parameter Details
args De opdrachtregelargumenten. Aannemende dat de main methode wordt aangeroepen door de Java launcher, args zal niet nul zijn, en zal niet moeten null elementen.

Opmerkingen

Wanneer een normale Java-toepassing wordt gestart met het java commando (of het equivalent), wordt een main aangeroepen die de argumenten van de opdrachtregel in de args array args .

Helaas bieden de bibliotheken van de Java SE-klasse geen directe ondersteuning voor de verwerking van opdrachtargumenten. Dit laat twee alternatieven over:

  • Implementeer de argumentverwerking handmatig in Java.
  • Gebruik een bibliotheek van derden.

Dit onderwerp zal proberen een aantal van de meer populaire bibliotheken van derden te behandelen. Zie voor een uitgebreide lijst met alternatieven dit antwoord op de StackOverflow-vraag "Hoe opdrachtregelargumenten in Java te parseren?" .

Argumentverwerking met GWT ToolBase

Als u complexere opdrachtregelargumenten wilt analyseren, bijvoorbeeld met optionele parameters, is het het beste om de GWT-benadering van Google te gebruiken. Alle lessen zijn openbaar beschikbaar op:

https://gwt.googlesource.com/gwt/+/2.8.0-beta1/dev/core/src/com/google/gwt/util/tools/ToolBase.java

Een voorbeeld voor het verwerken van de opdrachtregel myprogram -dir "~/Documents" -port 8888 is:

public class MyProgramHandler extends ToolBase {
   protected File dir;
   protected int port;
   // getters for dir and port
   ...

   public MyProgramHandler() {
       this.registerHandler(new ArgHandlerDir() {
            @Override
            public void setDir(File dir) {
                this.dir = dir;
            }
       });
       this.registerHandler(new ArgHandlerInt() {
            @Override
            public String[] getTagArgs() {
               return new String[]{"port"};
            }
            @Override
            public void setInt(int value) {
               this.port = value;
            }
       });
   }
   public static void main(String[] args) {
      MyProgramHandler myShell = new MyProgramHandler();
      if (myShell.processArgs(args)) {
         // main program operation
         System.out.println(String.format("port: %d; dir: %s",
            myShell.getPort(), myShell.getDir()));
      }
      System.exit(1);
   }
}

ArgHandler ook een methode isRequired() die kan worden overschreven om te zeggen dat het opdrachtregelargument vereist is (standaardteruggave is false zodat het argument optioneel is.

Argumenten met de hand verwerken

Wanneer de opdrachtregel-syntaxis voor een toepassing eenvoudig is, is het redelijk om het opdrachtargument volledig in aangepaste code te verwerken.

In dit voorbeeld presenteren we een reeks eenvoudige casestudy's. In elk geval zal de code foutmeldingen produceren als de argumenten onaanvaardbaar zijn en vervolgens System.exit(1) aanroepen om de shell te vertellen dat de opdracht is mislukt. (We gaan er in elk geval van uit dat de Java-code wordt aangeroepen met een wrapper waarvan de naam "myapp" is.)

Een opdracht zonder argumenten

In deze case-study vereist het commando geen argumenten. De code illustreert dat args.length ons het aantal opdrachtregelargumenten geeft.

public class Main {
    public static void main(String[] args) {
        if (args.length > 0) {
            System.err.println("usage: myapp");
            System.exit(1);
        }
        // Run the application
        System.out.println("It worked");
    }
}

Een opdracht met twee argumenten

In deze case-study vereist het commando precies twee argumenten.

public class Main {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.err.println("usage: myapp <arg1> <arg2>");
            System.exit(1);
        }
        // Run the application
        System.out.println("It worked: " + args[0] + ", " + args[1]);
    }
}

Merk op dat als we args.length om args.length te controleren, de opdracht zou crashen als de gebruiker deze zou uitvoeren met te weinig opdrachtregelargumenten.

Een opdracht met "vlag" -opties en ten minste één argument

In deze case-study heeft het commando een paar (optionele) vlagopties en vereist het na de opties ten minste één argument.

package tommy;
public class Main {
    public static void main(String[] args) {
        boolean feelMe = false;
        boolean seeMe = false;
        int index;
        loop: for (index = 0; index < args.length; index++) {
            String opt = args[index];
            switch (opt) {
            case "-c":
               seeMe = true;
               break;
            case "-f":
               feelMe = true;
               break;
            default:
               if (!opts.isEmpty() && opts.charAt(0) == '-') {
                   error("Unknown option: '" + opt + "');
               }
               break loop;
            }
        }
        if (index >= args.length) {
            error("Missing argument(s)");
        }      
        
        // Run the application
        // ...
    }

    private static void error(String message) {
        if (message != null) {
            System.err.println(message);
        }
        System.err.println("usage: myapp [-f] [-c] [ <arg> ...]");
        System.exit(1);
   }
}

Zoals u ziet, wordt het verwerken van de argumenten en opties nogal omslachtig als de syntaxis van de opdracht ingewikkeld is. Het is raadzaam om een "command line parsing" -bibliotheek te gebruiken; zie de andere voorbeelden.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow