Gå til innhold

[Løst] Lage kommandoer i en Java applikasjon


Anbefalte innlegg

Skrevet

Jeg kjører en .jar-fil via CMD. Det jeg ønsker er å lage kommandoer i den konsollen, er det noen som vet hvordan man gjør det? For øyeblikket er det ikke mulig å skrive i CMD-en.

Videoannonse
Annonse
Skrevet

her var det vel rett og slett ikke mulig å forstå helt hva du vil? ønsker du å lage kommandoer i shellet eller i java-applikasjonen, vil du ha kommandolinjeparametre inn fra kommandolinja i javaapplikasjonen? hva mener du med å skrive i cmd'en?

Skrevet

La oss si at jeg kjører en Java applikasjon i CMD-en. Jeg ønsker å kunne skrive kommandoer i CMD-en jeg åpnet Java applikasjonen i, når jeg utfører kommandoer vil jeg at Java applikasjonen skal behandle den utførte kommandoen.

Skrevet

Jeg kan ikke Java, men det du trenger er

1. En tråd som leser fra kommandolinja. Muligvis linken over.

2. En annen tråd som kjører kontinuerlig. Sett deg inn i tråder ("threads") i Java.

Skrevet (endret)

Da må du bruke flere tråder. Enten lager du en ny tråd som gjør det applikasjonen skal gjøre, eller du lager en ny tråd som venter på input fra brukeren.

 

Edit: Emancipate var raskere enn meg. Her er et eksempel på hvordan det kan gjøres:

public class Program {

  private static class Application extends Thread {

    private volatile boolean doContinue = true;

    public void run() {
      System.out.println("Application started!");
      do {
        // application code​
      } while (doContinue);
      System.out.println("Application stopped!");
    }

    public void handleCommand(String cmd) {
      if (cmd.length() == 0) return;
      if (cmd.equalsIgnoreCase("quit"))
        doContinue = false;
      else
        System.out.println("Unknown command: '" + cmd + "'");
    }

  }

  public static void main(String[] args) {
    Application app = new Application();
    app.start();
    java.util.Scanner scanner = new java.util.Scanner(System.in);
    String cmd = null;
    do {
      System.out.print("> ");
      cmd = scanner.nextLine().trim();
      app.handleCommand(cmd);
    } while (!cmd.equalsIgnoreCase("quit"));
  }

}

Endret av jonny
  • Liker 1
Skrevet (endret)

Bare gjorde det slikt jeg:

	public static void main(String[] args){
		commandHandler(null);
	}

	private static void commandHandler(final Scanner lastScanner){
		Runnable r = new Runnable() {
			public void run() {
				Scanner scanner = lastScanner;
				if (scanner == null) scanner = new Scanner(System.in);
				String command = scanner.nextLine();
				commandHandler(scanner);
				executeCommand(command);
			}
		};
		new Thread(r).start();
	}

Men noe jeg synes er litt unaturlig er at kommandoen blir utført på en annen Thread, men jeg antar det ikke har så veldig mye å si. Det finnes vell ikke tilfeldigvis en kjapp fiks for det?

Endret av waremanu
Skrevet (endret)

Bare gjorde det slikt jeg:

...

Men noe jeg synes er litt unaturlig er at kommandoen blir utført på en annen Thread, men jeg antar det ikke har så veldig mye å si. Det finnes vell ikke tilfeldigvis en kjapp fiks for det?

 

Hva mener du? Kommandoen blir utført av den tråden som tar imot brukerens kommando, etter at du først starter en ny tråd som tar imot brukerens neste kommando?

Endret av jonny

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...